2016-11-28 67 views
0

我不知道如何清楚地說明我的問題,但我會盡我所能,與這個例子:如何合併來自不同行的數據?

我有,目前看起來像一個表:

----------------------------------------------------- 
|No. | Name  | Request  | Sales Territory | 
----------------------------------------------------- 
|001 | Account 1 | NULL   | PNW    | 
----------------------------------------------------- 
|002 | Account 2 | MERGE TO 001 | NULL   | 
----------------------------------------------------- 
|011 | Account 5 | NULL   | EUROPE   | 
----------------------------------------------------- 
|500 | Account 8 | MERGE TO 011 | NULL   | 
----------------------------------------------------- 

我的目標是有它是這樣的:

----------------------------------------------------- 
|No. | Name  | Request  | Sales Territory | 
----------------------------------------------------- 
|001 | Account 1 | NULL   | PNW    | 
----------------------------------------------------- 
|002 | Account 2 | MERGE TO 001 | PNW    | 
----------------------------------------------------- 
|011 | Account 5 | NULL   | EUROPE   | 
----------------------------------------------------- 
|500 | Account 8 | MERGE TO 011 | EUROPE   | 
----------------------------------------------------- 

我使用CASE語句在過去的填寫欄的數據,但這一要求有我有點難倒,因爲它依賴於匹配RIGHT([要求],3)從表格添加到[編號]列,然後根據th填充列e合併到[號碼]。我有更多的專欄需要填寫,但我認爲這是我能夠解釋我的問題的最簡單的方法。

使用MSSQL。每列是VARCHAR(50)。

回答

2

CASE會正常工作,但COALESCE會更加乾淨地達到相同的結果。我認爲問題在於,您需要先將表加入自己,並確保您將第一個表上的「請求」字段加入到第二個字段的「編號」字段中。這是基於你的問題的例子:

CREATE TABLE #tmpAccount (
         [No.] VARCHAR(50) 
        ,Name VARCHAR(50) 
        ,Request VARCHAR(50) 
        ,[Sales Territory] VARCHAR(50) 
        ) 
INSERT INTO #tmpAccount 
VALUES ('001', 'Account 1', NULL, 'PNW') 
     ,('002', 'Account 2', 'MERGE TO 001', NULL) 
     ,('011', 'Account 5', NULL, 'EUROPE') 
     ,('500', 'Account 8', 'MERGE TO 011', NULL) 

SELECT tmp1.[No.] 
     ,tmp1.Name 
     ,tmp1.Request 
     ,COALESCE(tmp2.[Sales Territory], tmp1.[Sales Territory]) AS [Sales Territory] 
    FROM #tmpAccount tmp1 
      left join 
     #tmpAccount tmp2 on RIGHT(tmp1.Request, 3) = tmp2.[No.] 


DROP TABLE #tmpAccount 

這應該返回結果:

|No. |Name  |Request  |Sales Territory 
|001 |Account 1 |NULL   |PNW 
|002 |Account 2 |MERGE TO 001 |PNW 
|011 |Account 5 |NULL   |EUROPE 
|500 |Account 8 |MERGE TO 011 |EUROPE 
0

根據您正在使用的版本,您可以使用超前或滯後,實現你的手段:

http://blog.sqlauthority.com/2011/11/15/sql-server-introduction-to-lead-and-lag-analytic-functions-introduced-in-sql-server-2012/

這些讓你看行之前和查詢一行之後。

請用您正在使用的SQL版本標記您的問題,這對潛在答案有影響。

+0

我繼續編輯我的職務與服務器版本。 LEAD/LAG聽起來很有趣,但我不夠明白,不確定它會幫助我實現我想要的結果。我幾乎想知道是否應該將數字分配給所有相關的列,然後對此做一個CASE語句。 – CoffeeCoder

相關問題