Таблица Group By - Tsql - - PullRequest
       22

Таблица Group By - Tsql -

1 голос
/ 16 февраля 2009

альтернативный текст http://img187.imageshack.us/img187/8453/testhc3.png

альтернативный текст http://img145.imageshack.us/img145/3306/test2bn4.png

Первая картинка - мой запрос. Мне нужно получить результаты на второй картинке.

select OrarioA, OrarioB, MAX(VW_DettaglioOrariLinee_FromAToB.IDOrario), dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioA, dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioB
FROM         dbo.VW_DettaglioOrariLinee_FromAToB INNER JOIN
                      Tb_Linee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDRelA = Tb_Linee.IDRelA AND 
                      dbo.VW_DettaglioOrariLinee_FromAToB.IDRelB = Tb_Linee.IDRelB INNER JOIN
                      dbo.periodi ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.periodi.IDOrario INNER JOIN
                      dbo.relgiornisettimanaorarilinee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.relgiornisettimanaorarilinee.IDOrario

Это мой настоящий запрос:

WITH Tb_Linee AS
(
    SELECT * FROM VW_rellineestazionamenti 
    WHERE 
    IDLINEA = @IDLINEA 
    AND 
    IDStazA = @IDStazA 
    AND
    IDStazB = @IDStazB 
    AND
    PosizioneA = @PosizioneA
    AND
    PosizioneB = @PosizioneB
)


select OrarioA, OrarioB, VW_DettaglioOrariLinee_FromAToB.IDOrario, dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioA, dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioB
FROM         dbo.VW_DettaglioOrariLinee_FromAToB INNER JOIN
                      Tb_Linee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDRelA = Tb_Linee.IDRelA AND 
                      dbo.VW_DettaglioOrariLinee_FromAToB.IDRelB = Tb_Linee.IDRelB INNER JOIN
                      dbo.periodi ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.periodi.IDOrario INNER JOIN
                      dbo.relgiornisettimanaorarilinee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.relgiornisettimanaorarilinee.IDOrario

Ответы [ 2 ]

3 голосов
/ 16 февраля 2009

Если вы хотите разделить только на OrarioA:

SELECT OrarioA, OrarioB, IDOrario, IDDettaglioOrarioA, IDDettaglioOrarioB
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY OrarioA ORDER BY OrarioB DESC, IDOrario DESC) AS rn
  FROM table
  ) t
WHERE rn = 1

, это приведет к результирующему набору как на picture 2.

Если вы хотите разделить на OrarioA и OrarioB:

SELECT OrarioA, OrarioB, IDOrario, IDDettaglioOrarioA, IDDettaglioOrarioB
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY OrarioA, OrarioB ORDER BY IDOrario DESC) AS rn
  FROM table
  ) t
WHERE rn = 1

, но это не отфильтрует первую строку в вашем наборе результатов.

0 голосов
/ 17 февраля 2009

Из данных, которые вы объяснили на своих скриншотах, я понимаю, что вам нужны поля идентификатора для самого высокого IDOrario, сгруппированного по OrarioA и OrarioB?

SELECT IDDettaglioOrarioA, IDDettaglioOrarioB
FROM TABLE 
GROUP BY
OrarioA, OrarioB
ORDER BY IDOrario DESC

Если вам нужно выбрать больше столбцов, выберите больше по желанию.

...