使用WHERE CLAUSE更新返回错误

时间:2014-05-29 14:31:02

标签: sql sql-server sql-update where-clause

基本上我需要用另一个表中的日期填充我的临时表,但是按照原始(数据)表中已经订购(visit_cnt)的特定顺序....

**#PIVOT(数据表)

Member id    name     first_service_date        visit_cnt**
05465         matt               11/13                 2
05465         matt               9/12                  1
64985         mark               12/13                 2
64985         mark               8/13                  1

WCV_TEMP(临时) 我需要我的桌子看起来像这样。只有具有多个日期的单个记录...

Member id    name      visit1     visit2    visit3  
05465        matt        7/12      3/13      8/13
64965        mark        9/11      5/12      2/13
78995        luke        12/10     5/12      7/13

我在第二个表中使用WHERE CLAUSE更新每个列

UPDATE WCV_TEMP.VISIT_1 
SET WCV_TEMP.VISIT_1= #PIVOT.[FIRST SERVICE DATE] WHERE #PIVOT.VISIT_CNT =1 

UPDATE WCV_TEMP.VISIT_2 
SET WCV_TEMP.VISIT_2= #PIVOT.[FIRST SERVICE DATE] WHERE #PIVOT.VISIT_CNT =2 

UPDATE WCV_TEMP.VISIT_3 
SET WCV_TEMP.VISIT_3= #PIVOT.[FIRST SERVICE DATE] WHERE #PIVOT.VISIT_CNT =3

UPDATE WCV_TEMP.VISIT_5
SET WCV_TEMP.VISIT_5= #PIVOT.[FIRST SERVICE DATE] WHERE #PIVOT.VISIT_CNT =4

UPDATE WCV_TEMP.VISIT_5 
SET WCV_TEMP.VISIT_5= #PIVOT.[FIRST SERVICE DATE] WHERE #PIVOT.VISIT_CNT =5

任何帮助都将不胜感激!!

2 个答案:

答案 0 :(得分:0)

您的临时表中缺少Join。尝试这样的事情:

Update  W 
Set     VISIT_1 = P.[FIRST SERVICE DATE]
From    WCV_TEMP    W
Join    #PIVOT      P On P.[Member Id] = W.[Member Id]
Where   P.VISIT_CNT = 1 

与您的其他Update陈述类似。

答案 1 :(得分:0)

你不需要4-5个单独的更新语句,你可以使用类似这样的CASE语句将所有这些都放在一个更新语句中....

Update  W 
Set  W.VISIT1 = CASE 
                    WHEN  P.VISIT_CNT = 1  
                    THEN  P.[FIRST_SERVICE_DATE]
                 END
    ,W.VISIT2 = CASE 
                   WHEN  P.VISIT_CNT = 2  
                   THEN  P.[FIRST_SERVICE_DATE]
                 END  
    ,W.VISIT3 = CASE 
                   WHEN  P.VISIT_CNT = 3  
                   THEN  P.[FIRST_SERVICE_DATE]
                 END          
    ,W.VISIT4 = CASE 
                   WHEN  P.VISIT_CNT = 4  
                   THEN  P.[FIRST_SERVICE_DATE]
                 END

From    WCV_TEMP W INNER JOIN #PIVOT P 
On P.[Member Id] = W.[Member Id]