Member 13464294 Ответов: 2

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


МОИ ДАННЫЕ
-------
КОЛ-ВО ОТДЕЛА СТАВОК
1 ААА 21
1 SSS 22
2 SSS 25
2 ААА 21
2 DDD 36
3 ААА 52
3 SSS 63
1 DDD 41
2 FFF 52



ОЖИДАНИЕ ВЫХОДА
----------------
КОЛ-ВО ОТДЕЛА СТАВОК
1 ААА 21
SSS 22
DDD 41
2 SSS 25
ААА 21
DDD 36
FFF 52
3 ААА 52
SSS 63

Что я уже пробовал:

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

2 Ответов

Рейтинг:
2

Santosh kumar Pithani

SELECT 
  NULLIF(bid,LAG(bid)OVER(ORDER BY bid)) AS BID,
  DEPT,
  QTY 
  FROM Test_table 


CHill60

5 б.
Однако стоит отметить, что это будет работать только для версий SQL Server 2012 года (не экспресс-версия) и более поздних версий (включая экспресс-версию с 2014 года)

Richard Deeming

Почему вы думаете, что это не сработает в 2012 Express?

CHill60

Опыт. Возможно, я пропустил патч, но ЛАГ просто не работал, когда я попробовал его в 2012 express. Но с более поздними версиями все в порядке. Я не планирую переустанавливать, чтобы посмотреть, было ли это просто пропущенное обновление :-)

Santosh kumar Pithani

Спасибо,за ваш комментарий.

Member 13464294

спасибо за ваше предложение @santosh и все такое.

Но как chill60 заявление я сталкиваюсь с проблемой "лага", что он говорит, что ЛАГ не встроен в функцию sql в момент компиляции кода.

Рейтинг:
1

Karthik_Mahalingam

пробовать

WITH CTE
AS
( 
   SELECT bid, dept, qty,
     ROW_NUMBER() OVER(PARTITION BY bid ORDER BY bid) RowNo
  FROM tblTest
)
SELECT
 
  CASE RowNo
    WHEN 1 THEN bid
    ELSE null // null or empty, decide what you want to print for duplicate value
  END AS bid
   ,dept, qty 
FROM CTE


CHill60

5 б. Работает со всеми версиями с 2005 вверх

Karthik_Mahalingam

Спасибо CHill60

Member 13464294

танкс за твое предложение, Картик. можете ли вы сказать, что есть какой-то вариант сохранить эту строку ставок пустой, а не нулевой?

Танкс заранее.

Karthik_Mahalingam

Да есть такое.