T-SQL COALESCE не возвращает отдельных значений

Этот запрос возвращает повторяющиеся значения для Zip, чего я не думаю. Например: @pivotColumns возвращает следующий список, даже если подзапрос для zip имеет «отдельный Zip». Я предполагаю, что QUOTENAME может плохо работать для целей возврата списка уникальных значений? Мне нужен ZipCode без дубликатов

DECLARE   @PivotColumns AS NVARCHAR(MAX)

SELECT   @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM [dbo].[PivotStoreZip]
Where Zip in (
               Select distinct Zip 
               From PivotStoreZip 
               Where ZIP in ('39401','39402', '39406','39465','39475')
             )

print (@PivotColumns)

print (@PivotColumns) возвращает список, приведенный ниже, и, например, [39401] повторяет:

[39401],[39406],[39465],[39475],[39401],[39402],[39406],[39465],[39475]
coalesce хочет вернуть разные значения, и я подозреваю, что переменная @PivotColumns уже имеет аналогичные значения.
Yogesh Sharma 22.10.2018 19:09

Какие СУБД вы используете? (Этот код зависит от продукта.)

jarlh 22.10.2018 20:31
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
373
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

distinct в in бесполезен. in не создает дубликатов, и это не влияет на внешний запрос.

Думаю, ты хочешь сделать:

select  @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
from (select distinct Zip 
      from PivotStoreZip 
      where ZIP in ('39401', '39402', '39406', '39465', '39475')
     ) z;

Замечу, что это работает на практике. Я не уверен на 100%, что Microsoft гарантирует, что этот код в целом работает.

Ответ принят как подходящий

Вы можете попробовать использовать distinct в подзапросе для удаления дубликатов Zip вместо условия where.

SELECT   @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM (
    Select distinct Zip 
    From PivotStoreZip 
    Where ZIP in ('39401','39402', '39406','39465','39475')
) t1

Отдельного в подзапросе недостаточно, так как если у вас есть дубликаты в [dbo].[PivotStoreZip], они будут появляться из вашего основного запроса, поэтому просто добавьте туда и отдельный:

DECLARE   @PivotColumns AS NVARCHAR(MAX)

SELECT   @PivotColumns = distinct COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM [dbo].[PivotStoreZip]
Where Zip in (
               Select distinct Zip 
               From PivotStoreZip 
               Where ZIP in ('39401','39402', '39406','39465','39475')
             )

печать (@PivotColumns)

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