Выберите только отдельные значения из повторяющихся строк - PullRequest
0 голосов
/ 17 марта 2011

У меня есть таблица со следующими данными:

client   totalA     totalB   item#
clientA 454265.08   869.5   307-1-3138
clientA 1110067.09  869.5   307-1-3138
clientB 15900       852.5   307-1-3149
clientC 436450.76   465     307-5-680
clientC 1066535.03  465     307-5-680

Обратите внимание, что есть две строки для clientA и clientC, потому что столбец totalA отличается - поскольку суммы отображаются в 2 валютах - Мне нужно вернуть 2 строки на валюту, но во второй строке должен отображаться только столбец totalA, а для остальных - пустое. Итак, что я хочу, это:

  client   totalA      totalB   item#
clientA 454265.08    869.5    307-1-3138
           1110067.09                  
clientB 15900        852.5    307-1-3149
clientC 436450.76    465      307-5-680
           1066535.03                         

Есть предложения, как это сделать в SQL Server 2008?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 марта 2011
SELECT Client, totalA, case when number = 1 then totalb else null end totalB, case when number = 1 then item else null end Item 
FROM (
    select *, row_number() over(partition by client order by client) number 
    from Clients 
) A
1 голос
/ 17 марта 2011

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

В SQL Server 2005 и более поздних версиях вы можете использовать CTE, чтобы получить результат, близкий к тому, что вы 'ищите - попробуйте это:

WITH ShowClients AS
(
    SELECT 
        Client, TotalA, TotalB, ItemNo,
        ROW_NUMBER() OVER(PARTITION BY Client ORDER BY TotalA DESC) AS 'RowNo',
        ROW_NUMBER() OVER(ORDER BY Client,TotalA DESC) AS 'Sequence'
    FROM clients
)
SELECT
    Client, TotalA, TotalB, ItemNo, Sequence
FROM    
    ShowClients
WHERE
    RowNo = 1
UNION
SELECT
    '', TotalA, NULL, NULL, Sequence
FROM    
    ShowClients
WHERE
    RowNo > 1
ORDER BY
    Sequence

Это дает мне вывод:

Client      TotalA        TotalB      ItemNo       Sequence
clientA     1110067.0900   869.5000   307-1-3138       1
             454265.0800   NULL       NULL             2
clientB       15900.0000   852.5000   307-1-3149       3
clientC     1066535.0300   465.0000   307-5-680        4
             436450.7600   NULL       NULL             5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...