Új hozzászólás Aktív témák
-
DeFranco
nagyúr
Nem fordítva írod?
select * from T1
left join T2 on T1.azon=T2.azonami az egyenlet bal oldalán van (T1) abból minden és T2-ből az egyező.
ha
left join T2 on T2.azon=T1.azonakkor minden T2-ből és T1-ből ami egyező
tehát nem mindegy mi van az egyenlet bal oldalán, az lesz a "minden"
-
DeFranco
nagyúr
válasz
#79484416
#5842
üzenetére
technikai oszloppal esetleg, ahol egy nvl(cég,partner) -rel ekvivalens művelettel csinálsz egy oszlopot, és arra csoportosítasz.
nem szép, de azt hiszem működne.
minél többet gondolkodom rajta, annál inkább az az érzésem, hogy adatszervezésileg egyre inkább életszerűtlennek tűnik ez az igény, egy jól szervezett táblázatban ilyen esetnek nem volna szabad előfordulnia.
persze az élet nem az optimális adatszervezésről szól, én meg csak ugatom az sql-t, mert csak selecteket írogatok a munkámhoz, nem ez a szakterületem.
-
DeFranco
nagyúr
Eljátszottam vele dummy adatokon és tényleg működött hárommal is, majd utána az éles lekérdezésben is amit nem értek, mert eddig éles táblákon "missing right parenthesis" hibát dobott, annak ellenére, hogy a forma biztosan (murphy nyilván, de ellenőriztem) jónak kellett legyen, mert egymás alá másoltam háromszor ugyanazt a blokkot, csak 3 különböző define által előírt paraméter változott.
Murphy törvénye, valamit nyilván benézhettem mégis, ez a megerősítés viszont átlendített, hogy működnie kellene, nincs limitáció (nem találtam róla semmit a neten, ezzel kezdtem a keresést). Köszi!
@nyunyu: Create table jogom nincs, csak lekérdezni (select) tudok. Próbáltam volna én is declare felé elindulni, kínomban már with-eltem elé egy táblát de persze egyik sem működött. Köszi a visszajelzést neked is.
-
DeFranco
nagyúr
Sziasztok,
SQL developert használok, és van egy (szerintem egyszerű) probléma amit nem tudok megoldani. Autodidakta módon próbálok érvényesülni így lehet, hogy bőven hiányos a tudásom.
Szeretnék több (20-30) változót definiálni egy select előtt, amire a selecten belül hivatkozok. Minden változónak egy értéke van (lehet konstansnak kellene hívni, elnézést) a lényeg, hogy ezeket egy helyen lássam és tudjam módosítani a könnyebb követhetőség végett.
1-2 változóval még meg tudom csinálni hogy DEFINE paranncsal definiálom, de a harmadikra már elhasal.
Eddig így indítottam:
DEFINE valt1=33
DEFINE valt2=55
SELECT
table1.col1,
table1.col2*&valt1,
table1.col3*&valt2
FROM
table1Ami működik is, de 2-nél több DEFINE-nél "missing right parenthesis" hibaüzenetet kapok, pedig a szintaxis elvileg jó.
Hogy kell ezt szakszerűen összehozni? Érdekes módon erre nem találok példát google kereséssel sem.
-
DeFranco
nagyúr
Sziasztok!
Van egy SQL (developer) lekérdezésem, viszonylag komplex, több lekérdezés UNION-nal összekapcsolva, majd a végén az egész fölé teszek egy selectet, ami alapesetben SELECT * és igény szerint aggregálom az belső rész eredményeit.
Az alábbi változókat kapom eredményként (SELECT *-ra):
[Azonosító] (példában 'Alma')
[Leíró változó1] (példában 'Piros')
[Leíró változó2] (példában 'Savanyú')
[Érték] (Példában '2')Az azonosító aszerint szerepel egyszer, vagy többször, hogy a 2 db [Leíró változó]-ból egy, vagy több érték kapcsolódik hozzá, példa:
Alma, Piros, Savanyú, 2
Alma, Zöld, Savanyú, 4
Alma, Zöld, Édes, 8
Körte, Zöld, Édes, 1
Körte, Barna, Édes, 10
Citrom, Sárga, Savanyú, 4Be kellene vezetnem egy olyan változót, ami aszerint vesz fel egy-egy konstans értéket (pl. "egyszer" és "többször"), hogy az egyes azonosítók egyszer, vagy többször szerepelnek a táblában, de nem jövök rá, hogyan kellene. Próbálkoztam CASE / COUNT megoldással de sehogy sem akart összejönni.
Elvárt eredménytábla:
Többször, Alma, Piros, Savanyú, 2
Többször, Alma, Zöld, Savanyú, 4
Többször, Alma, Zöld, Édes, 8
Többször, Körte, Zöld, Édes, 1
Többször, Körte, Barna, Édes, 10
Egyszer, Citrom, Sárga, Savanyú, 4Tudnátok segíteni, merre induljak el?
-
DeFranco
nagyúr
nem vagyok adatbázisguru csak tanultam alapszinten meg használom, de elvileg nem ismételünk szükségtelenül adatokat, mert ahogy írtad is, redundáns.
erre egy view-t hoznék létre én is, ami lekérdezi és összekapocsolja az adatbázistáblákból az adatokat ott tudod szemrevételezni, hogy minden OK-e
-
DeFranco
nagyúr
válasz
nyugis21
#5283
üzenetére
nézd, ezt így nem igazán lehet, fejjel rohansz a falnak. tulajdonképpen te sem tudod hogy pontosan milyen eszközt akarsz használni, csak összeraksz apró részletekből valamit ami szerinted jó lesz. nem lesz jó.
jelenleg az a helyzet, hogy egy SQL topicban kérdezel accessről (ami itt erősen témán kívüli) egy olyan feladatra amihez excel is bőven elég (ami megint csak messze van az accesstől hát még az SQL-től) és amihez a tudásod még alapfogalmak szintjén sincs meg (ami nem feltétlenül baj, sőt... ezért vagyunk itt, csak éppen kicsit lassabban kellene haladni neked is.)
ahhoz, hogy tényeket rögzíts kb. idősorosan arra egy excel bőven több, mint elég, ahogy olvastam a feladatot, abból azt, ami reális cél (mások által nem módosítható módon rögzíteni tények X darab részletét, pl. téma, ügy, időpont, esemény típus, esemény tartalma, van-e határidő) tudja, és viszonylag könnyen tanulható autodidakta módon.
erre rá kellene szánnod önállóan pár hetet, egy hónapot, és csak utána a tapasztalatokkal felvértezve, valós problémákon alapuló kérdésekkel megkeresni a releváns szaktopicot. idő közben kiderül, ha valamiért van olyan funkció amire szükséged van, de az excel nem tudja, viszont az access igen (meglepődnék) utána viszont az adatokat könnyű lesz már átvnni accessbe igény esetén.
minden tiszteletem a kollégáké, hogy ilyen türelemmel próbálnak segíteni de úgy gondolom hogy ebből eredmény akkor lesz ha a fentieket megfontolod.
-
DeFranco
nagyúr
Sziasztok!
Van egy pivotolt lekérdezésem ami érdekes módon rossz, hiányos eredményt ad, az összegek sem "nagyösszesenben" sem az egyes részösszegekben nem stimmelnek. A kereszttábla fejei teljeskörűek, minden lehetséges értéket megadtam a
FOR-nál:SELECT * FROM
(
(
SELECT
VALTOZO1,
VALTOZO2,
OSSZEG
FROM
TABLA_A
)
UNION
(
SELECT
VALTOZO1,
VALTOZO2,
OSSZEG
FROM
TABLA_B
)
)
PIVOT
(
SUM(OSSZEG)
FOR VALTOZO1 IN ('V_X','V_Y','V_Z','V_Q','V_W')
) PV1Ha ugyanezt lekérem
SELECT * FROM
(
(
SELECT
VALTOZO1,
VALTOZO2,
OSSZEG
FROM
TABLA_A
)
UNION
(
SELECT
VALTOZO1,
VALTOZO2,
OSSZEG
FROM
TABLA_B
)
)kóddal és magam összesítem, az eredmény helyes, pivottal nem.
Mi lehet a hiba, hol kezdenétek keresni?
-
DeFranco
nagyúr
köszönöm, akkor már az elv sem volt jó, akkor így már világos.
gondolom akkor ezt azzal tudom áthidalni hogy előre with-elek mindent amit egyébként subquerybe raknék, majd onnan szedem be a megfelelő mutatókat egy fő querybe.
amint lesz lehetőségem átrendezem így a lekérdezést.
-
DeFranco
nagyúr
nos...
az oldschool módszert használom, ahogy írod és szépen megy is addig, ameddig leírtad.
ezek ugye önmagukban (a zárójelek között) önálló selectek, egymás változóit nem használják csak egymás mögé vannak láncolva.
(az hogy pivotolgatok is ezekben az önálló selectekben, az egy másik kérdés. szerintem redundáns és ki kellene szedni de még nem jöttem rá a mikéntjére, ha csak simán kiszedem akkor az egy-a-többhöz kapcsolatok miatt a 20k-s valós rekordszámból a várt 400k-s rekordszám helyett (x20 oszlop a pivotban) 380 millió rekord lesz, nyilván én vétek hibát valahol)
ez alá jönne az a rész (amit én írtam lentebb) amikor az önálló, tábla-szerű egységgé zárójelezett, aliasolt blokkokból ki szeretnék venni mutatókat, azokat pl. összeszorozni vagy kivonni, és ez már nem megy. mutatom példában:
SELECT * FROM
(
SELECT
AL1.munkavallalo...
FROM... AL1
) K
JOIN
(
SELECT
AL2.munkavallalo
AL2.mutatoX
FROM AL2
) KHD
ON K.munkavallalo = KH.munkavallalo
JOIN
(
SELECT
AL3.munkavallalo
AL3.mutatoY
FROM AL3
) AHD
-- eddig a te logikáddal megegyezik, annyiban tér el hogy select * from van a definiált értékek helyett, de ez indifferens azt hiszem
-- innen jönne az amit én szeretnék, de nem megy
JOIN
(
SELECT
K.munkavallalo
KHD.mutatoX-AHD.mutatY
FROM
???
) KAMEHAMEAde azt hiszem az első opció szerint lenne elegáns megcsinálni, én is gondoltam már erre (mióta megtanultam Tőled a where-t
) valószínűleg az lenne a praktikus. -
DeFranco
nagyúr
igen csak itt az általad leírt selectben már eleve aliasolt selectek a "táblaazonosítók" (K, KHD, KH, AHD)
és mivel a SELECT szintaktikája ha jól tudom megköveteli a FROM-ot, nem tudom mit írhatnék a ??? helyére, mert ha azt írom hogy
SELECT
K.[munkavállaló] "MUNK"
KHD.[érték]/AHD.[érték] AS "KPERA"
KH.[hónapazonosító] AS "HO"
FROM
K
JOIN KHD
ON
K.valami = KHD.valami
JOIN KH
ON
K.valami = KH.valami
JOIN AHD
ON
K.valami = AHD.valamiakkor az nem működik. azt nem tudom hogy elvileg kellene-e működnie, sajnos favágó módszerrel tanulom az sql-t
-
DeFranco
nagyúr
újabb problémába futottam bele, lehet egy kicsit vadulok már ezzel:
adott egy lekérdezés, ami elég hosszú, több subqueryből áll,
gyakorlatilag legyártok néhány kereszttáblát, majd ezeket joinolom egymás után, egyes kereszttáblákban nyers adatok vannak, más kereszttáblákban számított adatok.
pl.
1: munkavállalók havi keresete, havonkénti bontásban (KH)
2: munkavállalók keresete legyártott darabonként havonkénti bontásban (KHD)
3: munkavállalók éves keresete (K)
4: munkavállalók anyagfelhasználása havonkénti bontásban (AH)
5: munkavállalók anyagfelhasználása legyártott darabonként havonkénti bontásban (AHD)
6: munkavállalók éves anyagköltsége (A)a joinok miatt minden ilyen szakasz el is van nevezve (Pl. KHD, AHD), ezek alapján tudom K.Y=KHD.B módon kapcsolni.
a lekérdezés végére szeretnék tenni még egy kereszttáblát de azt már lehetőleg úgy, hogy az néhány korábbi subquery eredményére hivatkozzon, pl.
SELECT
K.[munkavállaló] "MUNK"
KHD.[érték]/AHD.[érték] AS "KPERA"
KH.[hónapazonosító] AS "HO"
FROM
???
PIVOT
(
SUM(KPERA)
FOR HO IN (...)
)Nem tudom hogy a felső subqueryket így meg tudom-e csapolni, jelenleg nem tudom megoldani, és ötletem sincs mit lehetne tenni a FROM mögé mert a subquery neveket nem akarja "fogyasztani"
egy nagy selecten belül kell mindent megoldanom, táblát gyártani nincs jogosultságom.
érzésem szerint amit egyszer valahol már legyártottam azt fel kellene tudnom használni úgy hogy nem ismétlem meg azt a kódrészt még egyszer de nem jövök rá hogy kellene ezt megtennem.
-
DeFranco
nagyúr
köszönöm szépen, így sem működött de megoldottam, egyszerűen kiszámoltattam vele még a selectben és azt pivotoltattam az abszolút érték helyett
select * from (
with egyed_osszeg as
(select egyed_azonosito,
sum(ertek) osszeg
from tabla
group by egyed_azonosito)
select t.egyed_azonosito,
t.csoport_kepzo,
--t.ertek,
o.osszeg,
t.ertek/o.osszeg arany
from tabla t
join egyed_osszeg o
on t.egyed_azonosito = o.egyed_azonosito
)
pivot
( sum(arany)
for csoport_kepzo in ('A','B'...)
)így már szépen működik, elé joinoltam az abszolút értékeket és teljes lett a tábla
köszönöm még egyszer a tippeket
-
DeFranco
nagyúr
Köszönöm szépen, nagyjából működik de nem teljesen:
1: a sum(ertek)/osszegre ugrik az ellenőrzés, nem fut le, a hibaüzenet az alábbi:
ORA-56902: összesítő függvényt várható a forgatási műveletben
56902. 0000 - "expect aggregate function inside pivot operation"
*Cause: Attempted to use non-aggregate expression inside pivot operation.
*Action: Use aggregate function.2: ez csak nekem kérdés mert még nem vagyok otthon pivotban: ha sum(ertek)-en hagyom tehát nem képzek indexet, akkor az eredménytábla úgy néz ki hogy ezeket az oszlopokat pakolja egymás mellé:
egyedi_azonosito II o.osszeg II A II B II C II stb.
tehát az [o.osszeg] oszlopot a pivotolt résztől függetlenül beteszi a "sorfej" és az "oszlopok" közé
Ez azért van, mert a pivotnál mindent sorfejlécnek értelmezünk ami nincs benne a sum és a for mezőkben és az a lekérdezés sorrendje szerinti hierarchiában alábontást jelent?
-
DeFranco
nagyúr
Sziasztok,
Oracle SQL developert használok és az alábbi feladatot szeretném megoldani.
Adott egy pivot-olt lekérdezés, amivel lejön egy kereszttábla, adatokkal.
Példa:
SELECT * FROM
(
SELECT
[EGYED AZONOSITO],
[CSOPORT KEPZO],
[ERTEK]
FROM
[TABLA]
)
PIVOT
(
SUM([ERTEK])
FOR [CSOPORT KEPZO] IN ([A],[B],[C],[...],[Z])
)Tehát ERTEK összesített adatait CSOPORT KEPZO szerint egymás mellé pakolja minden EGYED AZONOSITO esetén.
Szeretném mellé tenni egy másik kereszttáblába azokat az indexeket, amik úgy képződnek, hogy az EGYED AZONOSITO szerint minden ERTEK-et összeadok CSOPORT KEPZO-től függetlenül és ezzel a fenti tábla megfelelő sorának minden értékét elosztom.
Példa:
Első pivot:
Béla 0,0,15,0,0,30,0,15
Második pivot:
Béla 0,0,0.25,0,0,0.5, 0,0.25
Hogyan tudom ezt megoldani?
Új hozzászólás Aktív témák
- Mini PC
- Kormányok / autós szimulátorok topikja
- Ford topik
- Bestbuy játékok
- Azonnali fáradt gőzös kérdések órája
- Vezeték nélküli fülhallgatók
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Soundbar, soundplate, hangprojektor
- World of Tanks - MMO
- További aktív témák...
- Samsung Tablet S9 FE, 128GB, 5G, SM-X516BLGA
- Eladó BONTATLAN Samsung Galaxy S24+ 12/256GB Lila / 12 hó jótállás
- Eredeti Lenovo 300W töltők - ADL300SDC3A
- Eredeti Microsoft Windows 10 / 11 Pro OEM licenc Akciós áron! 64/32 bit Azonnali kézbesítéssel
- LG 27GR83Q-B - 27" IPS / QHD 2K / 240Hz & 1ms / NVIDIA G-Sync / FreeSync / DisplayHDR 400
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi



