2015-07-15 5 views
0

У меня есть таблица, как указано нижеQuery для описания группы, как доклад

ID  value  
---- ------ 
1  A1   
1  A2   
1  A3   
2  B1   
2  B2   
2  B3 

Мне нужно написать запрос с помощью SQL Server 2000, который показывает вывод, как указано ниже

ID  value  
----  ------ 
1   A1   
Null  A2   
Null  A3   
2   B1   
Null  B2   
Null  B3 
+0

печального для форматирования вопросов, ID столбец имеет следующие значения: 1, 2 и столбец Value имеют значение A1..A3, B1 ... B3 –

+1

Ouch ... вам все еще нужно использовать sql 2000? Это форматирование действительно должно быть оставлено на переднем конце. Это довольно уродливо с «новыми» функциями окна, но в sql 2000 этот тип вещей просто уродлив. –

+1

Обновление уже :) Поддержка Mainstream для SQL Server 2000 закончилась почти семь лет назад (и расширенная поддержка почти два года назад). – jpw

ответ

0

Этот вид отчета стиль форматирования лучше делать в правильном приложении для отчетов, но это можно сделать и на сервере.

Если вы использовали версию SQL Server> = 2005 (который вы действительно должны сейчас), вы могли бы использовать оконные функции для достижения этой цели достаточно легко, как это:

select case when rn = 1 then id else null end as id, value 
from (
    select *, rn = row_number() over (partition by id order by id, value) 
    from your_table 
    ) a 

, но так как вы используете древняя версия без функции row_number, мы должны как-то подражать этому. Один из способов - использовать количество строк в скоррелированном подзапросе - это должно работать, хотя оно не будет особенно эффективным.

select 
    case when (
     select count(*) 
     from your_table 
     where value <= t1.value 
     and ID = t1.ID 
    ) = 1 then ID 
     else null end as id 
     , value 
from your_table as t1 

Поскольку у меня нет доступа к любому серверу со старой версии я не мог проверить это, но я не вижу каких-либо очевидных причин, что он не должен работать.

+0

этот подход работает, но тогда в моем фактическом поле table [value] содержится строка с несколькими символами, включая специальные символы, и из-за этого испорченного этого столбца идентификатора. Получилось использовать другое поле, эквивалентное ID, чтобы установить порядок, как ожидалось. –

1

Согласившись с консенсусом, что это лучше всего сделать в презентации слое, но один из способов сделать это в SQL будут

SELECT fv.ID, 
     T1.value 
FROM Table1 T1 
     LEFT JOIN (SELECT ID, 
         MIN([value]) AS FirstVal 
        FROM Table1 
        GROUP BY ID) AS fv 
     ON T1.ID = fv.ID 
      AND T1.value = fv.FirstVal 
ORDER BY T1.ID, 
      T1.value 
+1

Это намного умнее моей придуманной схемы нумерации, предполагаю, что я должен был зайти на нумерационный подход, чтобы рассмотреть что-нибудь еще :) – jpw

+0

Этот код возвращает ту же таблицу :-) –

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

  • Нет связанных вопросов^_^