Изменение a С ПОМОЩЬЮ оператора CTE КАК

#sql #sql-server

Вопрос:

Пытаюсь понять, как изменить это С ПОМОЩЬЮ оператора CTE AS. То, что у меня есть ниже, обновит мой StackCustomerAltID численно с клиентами в порядке ABC, которые не являются пустыми и Delflg = 0. Но мне нужно выяснить, как изменить его, чтобы обновить мой StackCustomerAltID численно, клиенты в порядке ABC с пустыми клиентами. Но проблема, похоже, в пробелах. Я попытался удалить предложение where, но оно сначала помещает пробелы, а затем те, в которых есть реальные клиенты.

Существующий запрос

 WITH CTE AS(  SELECT StackCustomerAltID,  ROW_NUMBER() OVER (ORDER BY Customer) AS RN  FROM dbo.StackCustomer Where DelFlg = 0 and Customer lt;gt; '') UPDATE CTE SET StackCustomerAltID = RN;  

без пункта «где»

 WITH CTE AS(  SELECT StackCustomerAltID,  ROW_NUMBER() OVER (ORDER BY Customer) AS RN  FROM dbo.StackCustomer ) UPDATE CTE SET StackCustomerAltID = RN;  

Комментарии:

1. Вы хотите изменить порядок присвоения номеров, чтобы пробелы получали самые высокие номера вместо самых низких?

2. да, те, у которых имена клиентов в порядке abc, а затем пустые

Ответ №1:

Как насчёт:

 WITH CTE AS (  SELECT   StackCustomerAltID,  ROW_NUMBER() OVER   (  ORDER BY   CASE WHEN Customer Is Null THEN 1 ELSE 0 END,   Customer  ) AS RN  FROM   dbo.StackCustomer  ) UPDATE CTE SET StackCustomerAltID = RN;  

Комментарии:

1. Это правильный подход. Однако я думаю, что это можно сделать проще с помощью ORDER BY Customer IS NULL, Customer

2. пустые клиенты на самом деле пустые, а не пустые, я предполагаю, что тогда это не сработает?

3. @JShaffer Вам просто нужно заменить Customer Is Null на Customer = '' .

4. @Cargo23 Этот синтаксис не работает для меня в SQL Server 2016.

5. это сработало, когда я изменил его на Customer = »