2013-11-15 29 views
1

喜有樣基質的情況這一點與選擇查詢未來有一個開始日期和結束日期的WHERE條件,我知道什麼時候開始和結束基本上是7天計算MS SQL矩陣 - 顯示列行和列值列

T1 = 2 is a sum of 1+1 in same date

SUM(T1) 
WHERE Date BETWEEN 2013/11/11 AND 2013-11-17 
+-----+-------+----+----+----+----+------------+ 
| ID | Name | T1 | T2 | T3 | T4 | Date | 
+-----+-------+----+----+----+----+------------+ 
| 100 | House | 2 | 2 | 2 | 2 | 2013-11-14 | 
| 100 | House | 2 | 2 | 2 | 2 | 2013-11-15 | 
+-----+-------+----+----+----+----+------------+

我需要這樣的

+-----+------+------+------+------+------+------+------+------+ 
| ID | Type | Day1 | Day2 | Day3 | Day4 | Day5 | Day6 | Day7 | 
+-----+------+------+------+------+------+------+------+------+ 
| 100 | T1 | 00 | 00 | 00 | 2 | 2 | 00 | 00 | 
| 100 | T2 | 00 | 00 | 00 | 2 | 2 | 00 | 00 | 
| 100 | T3 | 00 | 00 | 00 | 2 | 2 | 00 | 00 | 
| 100 | T4 | 00 | 00 | 00 | 2 | 2 | 00 | 00 | 
+-----+------+------+------+------+------+------+------+------+

我試着使用UNION ALL支點,但不知道如何複雜的是這個

全國聯保,請幫我

感謝

嗨@conan是工作,但如果我需要在從接近像

添加兩個表

FROM #test,test1 WHERE test.Id=test2.Id

當我這樣做是說的id是

Msg 8156, Level 16, State 1, Line 19 The column 'Id' was specified multiple times for 'pre'.

Msg 8156, Level 16, State 1, Line 24 The column 'Id' was specified multiple times for 'Unp'.

Msg 8156, Level 16, State 1, Line 26 The column 'Id' was specified multiple times for 'Final'.

+0

我不能制定一個把我的頭頂部,所以只會評論,請使用SQL Server的PIVOT –

回答

1
if object_id('tempdb..#test') is not null drop table #test 

create table #test 
    (id int ,name varchar(5),t1 int,t2 int, t3 int ,t4 int,datecol datetime) 


insert into #test values (100,'house',2,2,2,2,'20131114'); 
insert into #test values (100,'house',2,2,2,2,'20131115'); 
insert into #test values (200,'cabin',1,1,1,1,'20131112'); 
insert into #test values (200,'cabin',1,1,1,1,'20131113'); 

select * from #test 

DECLARE @startdate AS DATETIME 

SET @startdate = '20131111' 


SELECT ID 
    ,Type 
    ,sum(CASE WHEN DaysDiff = 1 THEN holdcolumn ELSE 0 END) AS Day1 
    ,sum(CASE WHEN DaysDiff = 2 THEN holdcolumn ELSE 0 END) AS Day2 
    ,sum(CASE WHEN DaysDiff = 3 THEN holdcolumn ELSE 0 END) AS Day3 
    ,sum(CASE WHEN DaysDiff = 4 THEN holdcolumn ELSE 0 END) AS Day4 
    ,sum(CASE WHEN DaysDiff = 5 THEN holdcolumn ELSE 0 END) AS Day5 
    ,sum(CASE WHEN DaysDiff = 6 THEN holdcolumn ELSE 0 END) AS Day6 
    ,sum(CASE WHEN DaysDiff = 7 THEN holdcolumn ELSE 0 END) AS Day7 
FROM (
    SELECT * 
    FROM (
     SELECT datediff(d, @startdate, datecol) + 1 DaysDiff 
      ,* 
     FROM #test 
     WHERE datecol BETWEEN @startdate 
       AND dateadd(d, 6, @startdate) 
     ) AS pre 
    unpivot(Holdcolumn FOR [Type] IN (
       t1 
       ,t2 
       ,t3 
       ,t4 
       )) AS Unp 
    ) AS Final 
GROUP BY id 
    ,type 
ORDER BY id 
    ,type 
+0

喜@conan是工作,但如果我需要在FROM close中添加兩個表格,比如'#test,test1 WHERE test.Id = test2.Id',當我這樣做時,我說id是'Msg 8156,Level 16,State 1,Line 19 'Id '多次指定'pre'。 消息8156,級別16,狀態1,行24 「Id」列多次指定爲「Unp」。 Msg 8156,Level 16,State 1,Line 26 「Id」列多次爲'Final'指定。 – aas

+0

在「Pre」子查詢中,將*替換爲兩個表中的列名只添加id一次。包括表名稱時,指定id所以要麼test.id或test2.id – conan

+0

嗨,是否有可能添加不同的數據類型類型t1,t2,t3,t4這些是我需要添加t5,即varchar的整數我們該怎麼做?當我這樣做是說'與UNPIVOT列表中指定的其他列的類型衝突.' – aas

1
Declare @test table 
(id int ,name varchar(5),t1 int,t2 int, t3 int ,t4 int,datecol datetime) 
insert into @test values (100,'house',2,2,2,2,'20131114'); 
insert into @test values (100,'house',2,2,2,2,'20131115'); 
insert into @test values (200,'cabin',1,1,1,1,'20131112'); 
insert into @test values (200,'cabin',1,1,1,1,'20131113'); 

Select * from 
(select ID, DName, Orders, Typess 
From (select ID, DATENAME(DW, datecol) DName, t1, t2, t3, t4 from @test) a 
unpivot(
Orders FOR Typess IN (t1, t2, t3, t4))as unpvot) b 
pivot (
sum(Orders) for DName in (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday))as pvot 
order by id 
+0

嗨,是否有可能添加不同的數據類型類型t1,t2,t3,t4這些是我需要添加t5的整數,即varchar我們該如何做?當我這樣做的時候就是說與UNPIVOT列表中指定的其他列的類型衝突。 – aas

+0

確定每天會有單行嗎? –

+0

是的,每天有一個varchar值 – aas