SQL обновляет несколько строк без жесткого кода каждого значения - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу обновить тысячи строк, но ввод каждого значения занимает много времени

enter image description here

мой код

UPDATE #table
SET city = 'New York'
WHERE city is null
AND store_id = '22'

ожидаемый результат

store_id   city      state
22        New york   NY
22        New york   NY
22        New york   NY
33         LA        CA
33         LA        CA

как изменить код, чтобы мне не приходилось каждый раз вводить «Нью-Йорк» и т. Д.?спасибо

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
CREATE TABLE #t (store_id varchar(20),city varchar(20),[state] varchar(20))
INSERT INTO #t VALUES
('22', 'new', 'NY'),
('22', null, null),
('22', null, null),
('33', null, null),
('33', 'LA', 'CA')
;


WITH CTE AS 
(
    SELECT DISTINCT store_id, city, [state] FROM #t WHERE city IS NOT NULL
)
UPDATE #t
SET city = CTE.city, [state] = CTE.[state]
FROM CTE
INNER JOIN #t
ON CTE.store_id = #t.store_id
WHERE #t.city IS NULL
0 голосов
/ 28 ноября 2018

Это то, что приходит мне в голову, но я считаю, что может быть более оптимизированный способ сделать это:

WITH cteCities(store_id, city, state) AS
    (SELECT DISTINCT store_id, city, state FROM #table WHERE city IS NOT NULL)
UPDATE #table
SET city = cte.city, state = cte.state
FROM cteCities cte
INNER JOIN #table
ON cte.store_id = #table.store_id
WHERE #table.city IS NULL
...