Как обновить с дополнительными условиями, используя таблицу соединений в SQL Server - PullRequest
0 голосов
/ 25 июня 2018

У меня есть две таблицы с образцом данных, я хочу обновить данные в таблице А с условием. Таблица A образец

ID  Product     Price
001 Apple       Null
002 Orange      Null

Таблица B Образец

ID  Product     Type    Price
001 Apple       H       10
001 Apple       M       7
002 Orange      M       8
003 Banana      H       20
003 Banana      M       14

И я стараюсь, как следует

Update A
Set A.Price = isnull( (select B.Price where B.Type = 'H') , isnull(select B.Price where B.Type = 'M', 0))
from TableA A inner join TableB B on A.ID = B.ID

Я хочу результат как

ID  Product     Price
001 Apple       10
002 Orange      8

Но это не работает

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Попробуйте это

DECLARE @TableA AS TABLE(ID INT, Product VARCHAR(20),Price INT)
INSERT INTO @TableA
SELECT 001,'Apple',       Null UNION ALL
SELECT 002,'Orange',      Null

DECLARE @TableB AS TABLE (ID INT,Product VARCHAR(20),[Type] VARCHAR(2),Price INT)
INSERT INTO @TableB
SELECT 001,'Apple'  ,'H',10 UNION ALL
SELECT 001,'Apple'  ,'M',7  UNION ALL
SELECT 002,'Orange' ,'M',8  UNION ALL
SELECT 003,'Banana' ,'H',20 UNION ALL
SELECT 003,'Banana' ,'M',14



UPDATE A
SET A.Price = ISNULL(CASE B.[Type] WHEN 'H' THEN B.Price
                                    WHEN 'M' THEN B.Price END,0)
FROM @TableA A
INNER JOIN @TableB B ON A.ID=B.ID

SELECT * FROM @TableA

Результат

ID  Product Price
----------------
1   Apple   10
2   Orange  8
0 голосов
/ 25 июня 2018

вы должны использовать запрос, как показано ниже

update A
set A.price=B.price
from TableA A left join
(
select
   id,Price= 
    coalesce( max( case when Type='H' then Price end), max(case when type='M' then Price end), 0 )
from TableB B
group by ID
)B on A.Id=B.Id
...