Gevens verticaal naar horizontaal

Status
Niet open voor verdere reacties.

Moondust76

Gebruiker
Lid geworden
17 okt 2013
Berichten
22
Hallo allemaal,

Ik ben al uren aan het googlen om het in SQL Query Analyzer voor elkaar te krijgen om gegevens die verticaal in een tabel zijn opgenomen horizontaal weer te geven, maar ik heb het licht nog niet gezien. Kunnen jullie mij helpen?

Nu:

Inc_idCI_id
129
141
229
262
215
322
429

Gewenst:

Inc_idCI_id1CI_id2CI_id3
12941
2296215
322
429

Hoe krijg ik dit voor elkaar?

Oja, er zijn vele duizenden CI_id's mogelijk. Als het een beperkte lijst was had ik met MAX( CASE....etc. kunnen doen, maar die mogelijkheid heb ik hier niet.
 
Laatst bewerkt:
Ik weet het, ik ben uren door google-resultaten gegaan op zoek naar een toepasbare oplossing, maar tot op heden niets gevonden dat werkt in SQL Query Analyzer. Het commando PIVOT of UNPIVOT werkt niet.

Overigens, de pagina waar jij naar verwijst is precies het omgekeerde (columns to rows -> horizontaal naar verticaal) van wat ik wil (rows to clumns -> van verticaal naar horizontaal).
 
Laatst bewerkt:
Je moet je select verdubbelen en per waarde aan elkaar knopen middels UNION ALL of OUTER JOINS... Ik denk als je daar eens op googled je een heel eind komt, ik gebruik het specifiek voor wat jij nu vraagt en vaak als ik in een bepaalde report builder een grafiek moet bouwen op dergelijke data.. horizontaal is dan makkelijker.
 
Dat wel maar ik heb geen idee als je dit kan volgen, vooral omdat je de bijbehorende DB niet hebt van deze query. Het idee is simpel : haal een paar sets data op via SELECTS en combineer dit op een regel, misschien heb je er iets aan : (query is tbv financieel rapport)
[sql]
SELECT 'Omzet informatie', [A].[Omzet vanaf], .[Totaal omzet], [C].[Gemiddelde per factuur]
FROM
[Customers]
LEFT JOIN
(
--Verkrijg oudste factuur datum uit totaal facturen
SELECT MIN([Date]) AS [Omzet vanaf]
FROM
(
SELECT [Invoice Code], [Date] AS [Date]
FROM [Invoices Open]
WHERE [Customer ID] = (SELECT [Parameter1] FROM [Reporting Parameters])

UNION ALL

SELECT [Invoice Code], [Date] AS [date]
FROM [Invoices Closed]
WHERE [Customer ID] = (SELECT [Parameter1] FROM [Reporting Parameters])
)
AS [Oldest Invoice]) AS [A]
ON 1=1
LEFT JOIN
(
--Verkrijg totaal omzet
SELECT SUM([Amount]) as [Totaal omzet]
FROM
(
SELECT [Exchange rate] * [Amount] AS [Amount]
FROM [Invoices Open]
WHERE [Customer ID] = (SELECT [Parameter1] FROM [Reporting Parameters])

UNION ALL

SELECT [Exchange rate] * [Amount] AS [Amount]
FROM [Invoices Closed]
WHERE [Customer ID] = (SELECT [Parameter1] FROM [Reporting Parameters])
)
AS [Totaal omzet]) AS
ON 1=1

LEFT JOIN
(

--Verkrijg gemiddelde per factuur
SELECT AVG([Amount]) AS [Gemiddelde per factuur]
FROM
(
SELECT [Exchange rate] * [Amount] AS [Amount]
FROM [Invoices Open]
WHERE [Customer ID] = (SELECT [Parameter1] FROM [Reporting Parameters])

UNION ALL

SELECT [Exchange rate] * [Amount] AS [Amount]
FROM [Invoices Closed]
WHERE [Customer ID] = (SELECT [Parameter1] FROM [Reporting Parameters])
)
AS [Gemiddeld per factuur]
) AS [C]
ON 1=1

INNER JOIN
[Reporting Parameters] ON [Customers].[Customer id] = [Reporting Parameters].[Parameter1]
[/sql]
EDIT : Mijn ID ligt dus op Customer ID, dat is hetgeen wat overeenkomt tussen de selects en waarom ik het tot een regel kan bombarderen... in jou verhaal zou je een regel per ID gaan krijgen
 
Laatst bewerkt door een moderator:
Bedankt voor de handreikingen. Ik kan in grote lijnen wel volgen wat de query doet, maar het zou erg helpen als je nog kon aangeven hoe je data er voor de query uitziet en hoe ná de query, net als ik voor mijn situatie heb geschetst in mijn eerste post.
 
Als ik straks thuis ben zal ik je een ander voorbeeld sturen, dat is een 1 op 1 match met wat jij doet. Ik zal de gecombineerde selects laten zien + result (horizontaal, een record) met daarbij de losse select + results (verticaal, records). Kan wel wat later worden
 
Hallo patjuh, ik heb jouw query even wat beter bestudeerd. Als ik het goed begrijp gebruik je telkens LEFT JOIN om weer een kolom toe te voegen. Het verschil met mijn situatie is dat in jouw geval de gegevens van elke toegevoegde kolom uit een andere bron afkomstig is. Bij mij zijn alle CI's afkomstig uit dezelfde bron. De CI's hebben naast een id ook een volgnummer, maar hoe hoe kan ik b.v. de volgnummers 60441, 60442 en 60443 identificeren/selecteren als CI_1, CI_2 en CI_3?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan