2017-07-07 25 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