2017-07-07 58 views
-2

我具有每負荷消費和每個日期順序排列的數據,我實現呈現以下列方式:UNPIVOT和JOIN使用列和行號

ID Date Record ColNumber RowNumber 
---------------------------------------------------------------- 

ColNumber/ROWNUMBER是的信息中的位置表現公式 (實施例:該產品的說明是在表現公式的第一列,

       FORMULAR 
          ________________ 

Description BarCode Amount RetailPrice Others 
----------------------------------------------------- 

因此第四產品的上表現公式描述將是以下形式的:

ID Date Record ColNumber RowNumber 
---------------------------------------------------------------- 

ID Date Description 1   4 

「記錄」包含下式的所有列(描述,條碼,金額,零售價格,等。)

所以其目的是具有與下列的表:

ID Date Description BarCode Amount Retail 
------------------------------------------------------------------------ 

我覺得我需要使用PIVOT和JOIN的混合,但是我所做的只是將我帶回到最初的「原始」表格中。

這裏是讓你瞭解一個樣本:

IF OBJECT_ID ('tempdb..#temptab') IS NOT NULL 
DROP TABLE #temptab 

CREATE TABLE #temptab (
ID INT NOT NULL, 
SellDate date NOT NULL, 
Record nvarchar(255), 
ColNumber int, 
RowNumber int) 

INSERT INTO #temptab (ID, SellDate, Record, ColNumber, RowNumber) VALUES 
(1, '2017-01-01', 'Cookie1', 1, 1), 
(1, '2017-01-01', '21312332', 1, 2), 
(1, '2017-01-01', '3', 1, 2), 
(1, '2017-01-01', 'Banana1', 2, 1), 
(2, '2017-01-01', 'Apple1', 1, 1), 
(3, '2017-01-01', 'Peach1', 1, 1), 
(3, '2017-01-01', '546462', 1, 2); 

其中給出:

ID SellDate Record ColNumber  RowNumber 
1 2017-01-01 Cookie1 1    1 
1 2017-01-01 CH212332 2    1 
1 2017-01-01 3   3    1 
1 2017-01-01 Banana1 1    2 
2 2017-01-01 Apple1  1    1 
3 2017-01-01 Peach1  1    1 
3 2017-01-01 546462  2    1 

最後,我想一個表,看起來像

ID SellDate Description BarCode Amount    
1 2017-01-01 Cookie1  CH212332  3  
1 2017-01-01 Banana1   
2 2017-01-01 Apple1   
3 2017-01-01 Peach1   546462 

(缺失值將由信息的剩餘部分填充,我顯然沒有在表格中添加全部數據,或空的)

+0

請提供樣本數據和預期的結果。 –

+0

您能否提供更多關於「產品描述在公式第一欄」一行的信息? –

+0

添加了您的兩個請求。讓我知道,如果仍然不清楚 – endlessend2525

回答

0

試試這個,它會給你的預期結果

SELECT ID 
    ,SellDate 
    ,ISNULL(Record, '') AS Record 
    ,ISNULL(BarCode, '') AS BarCode 
    ,ISNULL(Amount, '') AS Amount 

FROM 
(

SELECT ID, SellDate, 
CASE WHEN ISNUMERIC(Record)=0 THEN Record ELSE NULL END AS Record 
,CASE WHEN ISNUMERIC(Record)=1 AND 
     LEN(CASE WHEN ISNUMERIC(Record)=1 THEN Record ELSE NULL END)>1 THEN Record ELSE NULL END AS BarCode 
,CASE WHEN LEN(CASE WHEN ISNUMERIC(Record)=1 THEN Record ELSE NULL END)=1 THEN Record ELSE NULL END AS Amount   
FROM #temptab 
)DT 

結果

ID SellDate Record  BarCode  Amount 
-------------------------------------------------- 
1 2017-01-01 Cookie1  
1 2017-01-01    21312332  
1 2017-01-01        3 
1 2017-01-01 Banana1  
2 2017-01-01 Apple1  
3 2017-01-01 Peach1  
3 2017-01-01    546462 
+0

我可以區分不同類型的數據。但是,我也有「CF8978977R」格式的BarCode和其他可能包含相同編號的列。在這種情況下,如何使用關於列和行的信息來更改代碼? – endlessend2525

+0

我改變了樣本應該看起來的樣子,看到它不含糊。我的壞 – endlessend2525

+0

我已經回答了您的預期結果 – 2017-07-07 13:16:35