2013-11-20 3 views
0

Извините за мой плохой английский.Как отобразить результат нескольких строк в одной строке в SQL?

Получаю некоторый результат. Вы можете видеть в SS.

Мой запрос:

SELECT TransferOrderDate=Siparisler.datescheduled, 
     ProductTransferDate=UrunTransfer.daterealized, 
     FirmName=Bayi.firmname, 
     PlateOfTruck=UrunTransfer.plate, 
     DriverOfTruck=Surucu.name, 
     LatOfTruck=TankerKonum.lat, 
     LngOfTruck=TankerKonum.lng, 
     SpeedOfTruck=TankerKonum.speed, 
     LastUpdate=TankerKonum.readtime, 
     PrintID=UrunTransfer.printoutid 
FROM producttransfer AS UrunTransfer 
     JOIN transferorder AS Siparisler 
     ON Siparisler.oid = UrunTransfer.transferorderid 
     JOIN dealer AS Bayi 
     ON Bayi.oid = Siparisler.dealerid 
     JOIN driver AS Surucu 
     ON Surucu.oid = Siparisler.driverid 
     JOIN devcocom_admin.tankerlocation AS TankerKonum 
     ON TankerKonum.tankerid = Siparisler.tankerid 
WHERE UrunTransfer.daterealized > Dateadd(hour, -24, Getdate()) 
     AND TankerKonum.oid IN (SELECT Max(TankerKonum.oid) 
           FROM devcocom_admin.tankerlocation AS 
             TankerKonum 
           GROUP BY TankerKonum.tankerid) 

выход так:

enter image description here

Но

Этот результат запроса есть 3 разных дилера. Но у него такие же truck,lat,lng,speed и т. Д.

В катушке один truck работает на один или два или три dealer. Я хочу показать весь результат в той же строке.

Как я могу изменить результат моего запроса, чтобы быть похожим на это:

enter image description here

TDName1:TransferDate for FirmName1 
TDName2:TransferDate for FirmName2 
TDName3:TransferDate for FirmName3 
PDName1 : ProductDate for FirmaName1 
PDName2 : ProductDate for FirmaName2 
PDName3 : ProductDate for FirmaName3 
+1

Вы можете изучить PIVOT, как описано здесь http://stackoverflow.com/questions/10428993/understanding-pivot-function-in-t-sql, и здесь http://stackoverflow.com/questions/24470/sql -server-pivot-examples или http://stackoverflow.com/questions/9830960/how-to-pivot-table-with-t-sql – Kane

+0

Попробуйте использовать общие выражения таблицы (CTE). Пример Пример здесь: [Нажмите здесь] [1] [1]: http://stackoverflow.com/questions/14274942/sql-server-cte-and-recursion-example –

ответ

-2

Предположим, вы делаете то, что вы хотите. Что, если появится какое-то время 4 или более дилеров? Общее решение - это столбцы GROUP BY, которые являются одинаковыми, и для того, что вы хотите разделить на 3 столбца, я бы пошел с некоторой совокупной функцией, которая возвращает массив. В psql это array_agg. Так оно и было бы:

SELECT a,b,c 
    , (array_agg(d order by a,b,c))[1] as d1 
    , (array_agg(d order by a,b,c))[2] as d2 
    , (array_agg(d order by a,b,c))[3] as d3 
FROM foo 
GROUP BY a,b,c 

Удачи вам!

+0

Не ясно извините – Mhmt

+0

что-то вроде http://sqlfiddle.com/#!1/8d040/2/0 - но это использует функцию array_agg из psql. Я не знаю, как его зовут (если есть) в ss2008. – murison

Смежные вопросы