2016-08-30 34 views
2

對不起,如果我以錯誤的方式提問,我是SQL新手。TSQL:需要有新列而不是下一行

我有我在哪裏參加不同的表

然後後插入值一個臨時表時,我看到,我需要更新臨時表與3場(colm1的日期時間,colm2日期時間,colm3錢) 來到爲此,我在臨時表中創建了字段。

現在,

select colm1,colm2,sum(colm3) 
    from OrginalTable 
    where [email protected] 
    group by colm1,colm2 

讓想這給人造成這樣的:

enter image description here

這裏更新到臨時表後,如果有多個數據,那麼我需要做類似下面,直到15倍:

Colm1,Com2,Colm3,colm1,colm2,colm3,

,而不是創建新行我需要這在1行顯示爲新的領域與

enter image description here

執行結果應該是所有爲1行。

我真的很困惑,我是否可以做預期的事情,如果有辦法請有人給我舉例或解決這個問題。

最後,感謝您的幫助

+1

對不起,這太混亂了,你可以給我看一下wh在你想要的結果? '如果有多個數據,那麼我需要像下面這樣做,直到15次< - 這是什麼意思?,爲什麼15次? – Lamak

+0

如果你想要新的列,我相信你將不得不選擇它們。 –

+0

@Lamak我已經更新了期望的問題,謝謝 – Akka

回答

1

你可以使用UNPIVOT然後Dynamic PIVOT

DEMO

設置:

create table temp (
    col1 integer, col2 integer, col3 integer 
) 

insert into temp values (1, 1, 1000); 
insert into temp values (1, 2, 500); 
insert into temp values (2, 3, 800); 
insert into temp values (2, 4, 700); 
insert into temp values (3, 1, 1100); 

UNPIVOT查詢:您需要一個row_number來創建一個虛假的列名稱。但隨後覆蓋行1給大家,讓所有列出現在單行

WITH cte as (
    SELECT row_number() over (order by col1, col2) as rn, 
      col1, col2, col3 
    FROM temp 
) 
SELECT 1 as rn, 
     'c_' + 
     CAST(rn AS VARCHAR(16)) + '_' + 
     myCol as myCol, 
     myVal 
INTO temp2    
FROM 
    (SELECT rn, col1, col2, col3 
    FROM cte) p 
UNPIVOT 
    (myVal FOR myCol IN 
     (col1, col2, col3) 
)AS unpvt; 

SELECT * FROM temp2; 

動態透視

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.myCol) 
      FROM temp2 c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT rn, ' + @cols + ' from 
      (
       select rn 
        , myCol 
        , myVal 
       from temp2 
      ) x 
      pivot 
      (
       max(myVal) 
       for myCol in (' + @cols + ') 
      ) p ';      

EXEC sp_executesql @query 

輸出:逆透視和動態透視結果

enter image description here

1

聽起來你應該爲你的數據庫UI層沒有做到。

否則,你需要像

SELECT t1.*, t2.*, ....... , t15.* 
FROM yourTable as t1, 
     yourTable as t2, 
     ...... 
     yourTable as t15 
WHERE t1.col1 >= t2.col1 and t1.col2 > t2.col2 
    AND t2.col1 >= t3.col1 and t2.col2 > t3.col2 
    .... 
    AND t14.col1 >= t14.col15 and t14.col2 > t15.col2 

問題是你需要知道的有15行,所以如果這個數字縮小查詢不會工作。

這就是爲什麼你應該這樣做的UI,而不是

+0

不,這是通過SQL獨自完成的。希望我可以通過UI做到,但如果是這樣,我必須製作一個UI – Akka