В запросе T-SQL найдите дубликаты в одном столбце с уникальными значениями и отобразите их в другом столбце

У меня есть таблица псевдонимов, связанных со значениями. Мне нужно найти повторяющиеся псевдонимы с уникальными идентификаторами записей.

Чтобы было понятнее, вот таблица:

ID    Alias     Value
---------------------
1     000123    3
2     000123    3
3     000234    4
4     000123    3
5     000345    5
6     000345    5

Результатом запроса к этой таблице должно быть что-то вроде

ID    Alias     Value1    Value2
---------------------------------------
1     000123       3        3
2     000123       3
3     000234       4        4
4     000123       3
5     000345       5        5
6     000345       5     

В настоящее время я использую EXCEL для обходного пути:

=IF(COUNTIF($F$2:$F109889, $F109889)=1, $I109889, "")
Alias   --          Value1      Value2
---------------------------------------
16986   1231        2639.26     2639.26
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 
16986   1231        2639.26 

Но из-за большого количества записей (около 200 тыс. строк) иногда мой ноутбук зависает более часа.

Есть ли какие-нибудь решения, которые будут работать лучше?

Я пытаюсь сделать отчет на SQL Server, а не в Excel.

Почему возникает дополнительная ценность 4 для 000234? Будет ли у вас более одной строки дубликатов? Как вы хотите получить результат в таком случае?

Squirrel 15.07.2024 04:50
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
SELECT
  ID
  ,Alias
  ,Value1   = Value
  ,Value2   = IIF(COUNT(*)OVER(PARTITION BY Alias 
                               ORDER BY ID 
                               ROWS UNBOUNDED PRECEDING) = 1
                  ,Value
                  ,NULL )
  ,Value2_2 = IIF(COUNT(*)OVER(PARTITION BY Alias 
                               ORDER BY ID 
                               ROWS UNBOUNDED PRECEDING) = 1
                  ,FORMAT(Value,'0')
                  ,'' )
FROM (VALUES
 (1, '000123', 3)
,(2, '000123', 3)
,(3, '000234', 4)
,(4, '000123', 3)
,(5, '000345', 5)
,(6, '000345', 5)
)v(ID, Alias, Value)
ORDER BY ID

Тк! С вашей помощью у меня все получилось!!!

Grayson Chee 15.07.2024 06:13

@Dale K Готово, только что узнал.

Grayson Chee 15.07.2024 09:31

Другие вопросы по теме