2009-11-02 4 views
0

У меня есть таблица в базе данных имени «задержка поезда, с колоннамиSQL-вопрос: как я могу привести несколько результатов к одной строке?

train number(int), 
DelayTime(int), 
DelayReason(nchar) 

так что поезд может иметь более одного delaytime для каждой причины задержки, например:

trainnumber,Delaytime,DelayReason 
1   ,5 sec ,x 
1   ,10 sec ,Z 
1   ,70 sec ,TY 

Я хочу создать кристалл отчет со следующей конструкцией:

trainnumber, delaytime 1,delay reason 1 ,delaytime 2, delay reason 2,delaytime 3,delay reason 3 

Но я не знаю, запрос, который получит меня этот результат

.

Я попытался это:

select delaytime from dbo.traindelay 

Но результат выглядит следующим образом:

Delaytime 
5 
10 
70 

И я не хочу этого. Я хочу что-то вроде этого:

delaytime1 ,delaytime2 ,delaytime3 
+0

У вас всегда будет три задержки на поезд? Возможно ли, что некоторые поезда никогда не будут отложены? В то время как другие могут задерживаться чаще? – APC

+0

Thnx tvanfoson для редактирования, но я хочу ответить: D: D – hatemGamil

+0

@APC я могу не иметь dalays вообще или это может быть 1 или 2 или 3 , но не более 3 задержки Thnx – hatemGamil

ответ

0

Во-первых, я предлагаю новую структуру, добавив столбец Id, так что теперь у вас есть 2 таблицы:

  • Поезд (интермедиат Id, строка Name)
  • TrainDelay (интермедиат Id, внутр TrainId, внутр DelayTime, NCHAR DelayReason

SQL-запрос, чтобы иметь максимум 3 задержек на поезде:

select 
    t.Name, 
    d1.DelayTime as Delay1, 
    d1.DelayReason as Reason1, 
    d2.DelayTime as Delay2, 
    d2.DelayReason as Reason2, 
    d3.DelayTime as Delay3, 
    d3.DelayReason as Reason3, 
from Train as t 
left join TrainDelay as d1 on d1.TrainId = t.Id 
left join TrainDelay as d2 on d2.TrainId = t.Id and d2.Id > d1.Id 
left join TrainDelay as d3 on d3.TrainId = t.Id and d3.Id > d2.Id 

Обратите внимание, что если у вас более трех задержек для одного и того же поезда, у вас будет несколько результатов на поезд с дублированными записями. Вы можете добавить больше объединений, но это будет очень медленным, если ваш стол большой.

+0

работает manitra спасибо вам много, но я хочу спросить другую вещь, я хочу отобразить отчет о кристалле, такой как у меня есть 11 статических причин в базе данных, и я хочу, чтобы это выглядело как таблица например причина 1, причина 2, причина 3 delay1 0, 5, 6 delay2 4, 6, 9 delay3 5, 3, 1 я хочу запрос, чтобы сделать это – hatemGamil

+0

, если этот ответ в порядке, пометить его как «правильный ответ» и задать второй вопрос в другом Thr ead :) Было бы легче прочитать его. –

+0

Разве это не ясно, что вы действительно хотите. Возможно, вы должны отредактировать свой первый пост, чтобы уточнить, что именно вы хотите. –