SQL lekérdezés több sorból egy sorba minden adattal

SQL lekérdezés több sorból egy sorba minden adattal
2014-07-11T09:06:30+02:00
2014-07-12T06:48:25+02:00
2022-12-01T08:41:53+01:00
Davinci
Sziasztok!Az előző témám szeretném bővíteni a következőképpen, a lekérdezéseket Delphiben dbgridekben szeretném meghívni cellclick eseményre.

A táblám a következőképpen néz ki

megrendelő neve| megrendelő címe| Telephely címe| jelleg                     | kapcsolattartó neve | Telefonszáma
       CBA KFT       | Budapest            | Szeged               | kiskereskedelem   | Polyák Lajos             | telefonszam1
       CBA KFT       | Budapest            | Szeged               | nagykereskedelem| Sebestyén Katalin    | telefonszam1
       CBA KFT       | Budapest            | Szeged               | kiskereskedelem   | Kiss Ernő                  | telefonszam2
       CBA KFT       | Budapest            | Dunaharaszti      | kiskereskedelem   | Tóth Gábor              | telefonszam3

Szeretném csak a Budapest, Szeged-hez tartozó CBA KFT-t kiíratni egy sorban úgy, hogy a kapott érték tartalmazza a táblázat további adatait is.
 A lekérdezésem eddig:

select distinct megrend_nev, megrend_cim, telephely_cim from megrendelo_tabla where megrend_nev = 'CBA KFT' GROUP BY megrend_nev, megrend_cim, telephely_cim
Ennek eredménye:

megrendelő neve| megrendelő címe| Telephely címe| jelleg                     | kapcsolattartó neve | Telefonszáma
       CBA KFT       | Budapest            | Szeged               |                               |                                |                                                
       CBA KFT       | Budapest            | Dunaharaszti      |                               |                                |

Ez eddig jó, de nekem valahogy szükségem lenne arra hogy a lekérdezés eredménye tartalmazzon minden adatot, azaz jelleget, kapcsolattartót és telefonszáot hiszen egy újabb lekérdezésből akarom meghívni a CBA KFT - BUDAPEST- SZEGEDHEZ tartozó pl jellegeket

Listaszerűen nekem elég lenne, ezt az eredményt várom

select megrend_nev, megrend_cim,sz_cim, jelleg from megrendelo_tabla where megrend_nev = 'CBA KFT'
jelleg
kiskereskedelem
nagykereskedelem

Erre van valakinek valamilyen ötlete?

Köszönöm!
Mutasd a teljes hozzászólást!
A kérdésed azért hibás és érthetetlen, mert a "CBA KFT       | Budapest            | Szeged" rekordokhoz tartozik kétféle jelleg is.
Ha mindkét jelleget szeretnéd látni, akkor csak a szűrési feltételben kell megadni a megrendelő nevét, címét és telephelyét:

select megrend_nev, megrend_cim, sz_cim, jelleg from megrendelo_tabla where (megrend_nev = 'CBA KFT') and (megrend_cim = 'Budapest') and (sz_cim = 'Szeged')
Ez viszont nem egy sort, hanem két sort fog eredményezni.
Egy sorba úgy tudod összeszedni a listát, hogy számításokat adsz azoknak az oszlopoknak, amiknek nem akarod részletesen lebontani a rekordjait. Lekérdezed az adott oszlop minimumát (min), vagy darabszámát (count).

select megrend_nev, megrend_cim, sz_cim, count(jelleg) from megrendelo_tabla where (megrend_nev='CBA KFT') and (megrend_cim = 'Budapest') and (sz_cim = 'Szeged') group by megrend_nev, megrend_cim, sz_cim
Mutasd a teljes hozzászólást!

  • Amit az elúzú hasonló kérdésedre kaptál választ az nem jó?
    Bár, a kérdést sem értem, mit szeretnél.
    Ha csak egy telephely jellegeit akarod kiiratni, akkor
    select jelleg from megrendelo_tabla where megrend_nev = ... and megrend_cim = ... and sz_cim = ...
    De jobban járnál, ha normalizálnád ezt a táblát (és talán az adatbázist is). Úgy sokkal egyszerűbb megirni a lekérdezésekket.
    Mutasd a teljes hozzászólást!
  • mssql-es megoldást tudok adni, hátha segít (a delphi dbgrid-et nem ismerem)

    USE test GO /*feltöltés teszt adatokkal)*/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[basetable]( [megrendnev] [varchar](100) NULL, [megrendcim] [varchar](100) NULL, [telephely] [varchar](100) NULL, [jelleg] [varchar](100) NULL, [kapcstartnev] [varchar](100) NULL, [telszam] [varchar](100) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO INSERT [dbo].[basetable] ([megrendnev], [megrendcim], [telephely], [jelleg], [kapcstartnev], [telszam]) VALUES (N'CBA', N'BUD', N'SZEGED', N'KISK', N'POLY', N'123') INSERT [dbo].[basetable] ([megrendnev], [megrendcim], [telephely], [jelleg], [kapcstartnev], [telszam]) VALUES (N'CBA', N'BUD', N'SZEGED', N'NAGYK', N'SEB', N'456') INSERT [dbo].[basetable] ([megrendnev], [megrendcim], [telephely], [jelleg], [kapcstartnev], [telszam]) VALUES (N'CBA', N'BUD', N'SZEGED', N'KISK', N'KISS', N'789') INSERT [dbo].[basetable] ([megrendnev], [megrendcim], [telephely], [jelleg], [kapcstartnev], [telszam]) VALUES (N'CBA', N'BUD', N'DUNA', N'KISK', N'TOTH', N'987') INSERT [dbo].[basetable] ([megrendnev], [megrendcim], [telephely], [jelleg], [kapcstartnev], [telszam]) VALUES (N'CBA', N'BUD', N'BUD', N'KISK', N'LON', N'654') INSERT [dbo].[basetable] ([megrendnev], [megrendcim], [telephely], [jelleg], [kapcstartnev], [telszam]) VALUES (N'CBA', N'BUD', N'BUD', N'NAGYK', N'JIM', N'321') GO SELECT * FROM basetable GO /*magick happens*/ SELECT DISTINCT A.megrendnev, A.megrendcim, A.telephely, STUFF((SELECT distinct '; ' + B.jelleg FROM basetable B WHERE B.telephely = A.telephely FOR XML PATH('')), 1, 1, '') [jelleg], STUFF((SELECT distinct '; ' + B.kapcstartnev FROM basetable B WHERE B.telephely = A.telephely FOR XML PATH('')), 1, 1, '') [kapcstartnev], STUFF((SELECT distinct '; ' + B.telszam FROM basetable B WHERE B.telephely = A.telephely FOR XML PATH('')), 1, 1, '') [telszam] FROM basetable A GROUP BY A.telephely, A.jelleg, A.megrendnev, A.megrendcim ORDER BY 1
    Mutasd a teljes hozzászólást!
  • A kérdésed azért hibás és érthetetlen, mert a "CBA KFT       | Budapest            | Szeged" rekordokhoz tartozik kétféle jelleg is.
    Ha mindkét jelleget szeretnéd látni, akkor csak a szűrési feltételben kell megadni a megrendelő nevét, címét és telephelyét:

    select megrend_nev, megrend_cim, sz_cim, jelleg from megrendelo_tabla where (megrend_nev = 'CBA KFT') and (megrend_cim = 'Budapest') and (sz_cim = 'Szeged')
    Ez viszont nem egy sort, hanem két sort fog eredményezni.
    Egy sorba úgy tudod összeszedni a listát, hogy számításokat adsz azoknak az oszlopoknak, amiknek nem akarod részletesen lebontani a rekordjait. Lekérdezed az adott oszlop minimumát (min), vagy darabszámát (count).

    select megrend_nev, megrend_cim, sz_cim, count(jelleg) from megrendelo_tabla where (megrend_nev='CBA KFT') and (megrend_cim = 'Budapest') and (sz_cim = 'Szeged') group by megrend_nev, megrend_cim, sz_cim
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd