Мой динамический запрос работает, когда присутствуют как родительские, так и дочерние данные sku, но не работает, когда ребенок отсутствует, но присутствует родительский sku

Мой динамический запрос работает, когда присутствуют данные как parentku, так и childsku, но не работает, когда childsku отсутствует, но у родителей есть. Это тот случай, когда он не работает … Я хочу, чтобы он обрабатывал оба случая …

Вот моя таблица ввода Входная таблица

IF OBJECT_ID('tempdb..##TEMP_ParentsChild_Products') IS NOT NULL DROP TABLE ##TEMP_ParentsChild_Products SET @SQL = 'SELECT a.'[email protected]_SKU+' AS ''Parent SKU'' ,COUNT('[email protected]_SKU+') AS ''ChildSKU_Total'' ,STUFF((SELECT '','' +'[email protected]_SKU+' FROM ['[email protected]+'] b WHERE b.'[email protected]_SKU+' = a.'[email protected]_SKU+' FOR XML PATH('''')),1, 1, '''') AS ''ChildSKU'' INTO ##TEMP_ParentsChild_Products FROM ['[email protected]+'] a GROUP BY '[email protected]_SKU+''; PRINT(@SQL) EXEC(@SQL) SELECT *FROM ##TEMP_ParentsChild_Products; 

Вот ожидаемый результат, который я хочу: Ожидаемый результат

Попробуй это

 SET @SQL = 'SELECT a.'[email protected]_SKU+' AS ''Parent SKU'' ,sum(case when '[email protected]_SKU+' is null or '[email protected]_SKU+' = '' then 0 else 1 end) AS ''ChildSKU_Total'' ,STUFF((SELECT '','' +'[email protected]_SKU+' FROM ['[email protected]+'] b WHERE b.'[email protected]_SKU+' = a.'[email protected]_SKU+' AND b.'[email protected]_SKU+' IS NOT NULL FOR XML PATH('''')),1, 1, '''') AS ''ChildSKU'' INTO ##TEMP_ParentsChild_Products FROM ['[email protected]+'] a GROUP BY '[email protected]_SKU+''; 

Когда вы объединяете NULL в строку, результат равен NULL. Это применимо и ко многим другим операторам SQL.

Поэтому вы можете попробовать использовать ISNULL (@sku, 'null') или что-то в этом роде.

Почему это должно быть построено динамически? Динамический SQL редко необходим и может представлять угрозу безопасности. Если бы я был вами, я попытался бы сделать это, используя параметризованную запрошенную / хранимую процедуру.

в столбце Child_SKU могут быть значения NULL, добавьте условие where, как показано ниже, чтобы избежать нулевых значений и ненужной запятой.

 SET @SQL = 'SELECT a.'[email protected]_SKU+' AS ''Parent SKU'' ,COUNT('[email protected]_SKU+') AS ''ChildSKU_Total'' ,STUFF((SELECT '','' +'[email protected]_SKU+' FROM ['[email protected]+'] b WHERE b.'[email protected]_SKU+' = a.'[email protected]_SKU+' AND b.'[email protected]_SKU+' IS NOT NULL FOR XML PATH('''')),1, 1, '''') AS ''ChildSKU'' INTO ##TEMP_ParentsChild_Products FROM ['[email protected]+'] a GROUP BY '[email protected]_SKU+''; 
Interesting Posts

SSDT: Скалярное значение. Проверьте, нет ли ячейки.

Как я могу создать настраиваемое исключение в SQL Server

SQL – заполнение нескольких переменных в одном запросе

Обновляет ли статистика статистику перекомпилированных хранимых процедур на сервере sql

Статистика и индексы SQL – Насколько они детализированы?

SQL Server выполняет удаление во всех дочерних записях при удалении из родительского

Как получить CREATE TABLE Разрешение для пользователей проверки подлинности Windows в SQL Server express 2005

SQL автоматически округляет значения

ASP VBscript получает sql-скрипт хранимой процедуры

Драйвер Golang mssql возвращает «mssql: Недопустимое имя объекта»

Использование строковой строки «NONE» в SQL, где, по-видимому, критерии путаются с данными NULL

Можно ли использовать определенные пользователем агрегаты (clr) с функциями окна (над)?

Как запустить очень большой запрос (SQL Server и ColdFusion)

Почему TClientDataSet получает неправильный тип для полей WideText?

Подзапрос с платформой Entity Framework

Давайте будем гением компьютера.