2012-12-07 42 views
1

這是我的桌子。這些數字是對角線來的。如何將對角線行轉換爲單行?

Engineering Financials Scope Schedule Risks People 
-------------------------------------------------------- 
1   NULL  NULL NULL  NULL NULL 
NULL   0   NULL NULL  NULL NULL 
NULL   NULL  0  NULL  NULL NULL 
NULL   NULL  NULL 0   NULL NULL 
NULL   NULL  NULL NULL  0  NULL 
2   NULL  NULL NULL  NULL NULL 
NULL   4   NULL NULL  NULL NULL 
NULL   NULL  3  NULL  NULL NULL 
NULL   NULL  NULL 4   NULL NULL 
NULL   NULL  NULL NULL  4  NULL 
NULL   NULL  NULL NULL  NULL 0 
0   NULL  NULL NULL  NULL NULL 
NULL   0   NULL NULL  NULL NULL 
NULL   NULL  0  NULL  NULL NULL 
NULL   NULL  NULL 0   NULL NULL 
NULL   NULL  NULL NULL  0  NULL 
NULL   NULL  NULL NULL  NULL 0 
0   NULL  NULL NULL  NULL NULL 
NULL   0   NULL NULL  NULL NULL 
NULL   NULL  0  NULL  NULL NULL 
NULL   NULL  NULL 0   NULL NULL 
NULL   NULL  NULL NULL  0  NULL 
NULL   NULL  NULL NULL  NULL 0 
1   NULL  NULL NULL  NULL NULL 
NULL   0   NULL NULL  NULL NULL 
NULL   NULL  5  NULL  NULL NULL 
NULL   NULL  NULL 4   NULL NULL 
NULL   NULL  NULL NULL  3  NULL 
NULL   NULL  NULL NULL  NULL 3 

我想那些進來的輸出:

Engineering Financials Scope Schedule Risks People 
-------------------------------------------------------- 
1   0   0  0   0  NULL 
2   4   3  4   4  0 
0   0   0  0   0  0 
0   0   0  0   0  0 
0   0   0  0   0  0 
1   0   5  4   3  3 

其實我想這些對角線行轉換成一個單獨的行,每節。

+0

請編輯您的問題並使用代碼工具({})來格式化表格。 – HABO

+2

是否有將對角線排列在一起的關鍵列?換句話說,你怎麼知道前5行是相互關聯的,後​​面6行是相關的? –

+0

@Akhil ---如何編輯我的問題,我無法做到這一點 – Puskar

回答

3

您希望作爲結果的聚合似乎基於表中行的順序。在表中,行順序應該不重要,並且假定訂單保持不變是危險的。

所以,除非你還沒有向我們展示完整的源表(例如一個Section列),否則很難給你一個有用的答案。


編輯:

如果一個Section列,您可以使用以下查詢來獲取你想要的結果:

SELECT Section 
     ,SUM(Engineering) AS Engineering 
     ,SUM(Financials) AS Financials 
     ,SUM(Scope) AS Scope 
     ,SUM(Schedule) AS Schedule 
     ,SUM(Risks) AS Risks 
     ,SUM(People) AS People 
FROM  YourTable 
GROUP BY Section; 

而不是使用SUM功能要彙總您的數據,您還可以使用MAX或其他功能,具體取決於數據以及您想要從中獲得什麼。

4

這太長了,無法評論,所以我在回答。

如果數據來自數據表或來自查詢,那麼您的數據來自何處並不完全清楚。您的previous question was about a PIVOT以及您提供的數據與相同的數據相匹配,因此我將猜測這是來自該查詢。

如果您使用的是PIVOT查詢,並且子查詢中的字段過多,則可能發生此類行爲。

示例數據查詢1

CREATE TABLE yourtable ([Name] varchar(11), [Rating] int); 

INSERT INTO yourtable ([Name], [Rating]) 
VALUES 
    ('Engineering', 1), 
    ('Financials', 3), 
    ('Scope', 1), 
    ('Schedule', 2), 
    ('Risks', 3), 
    ('People', 3); 

PIVOT,將提供正確的結果

select * 
from 
(
    select name, rating 
    from yourtable 
) src 
pivot 
(
    max(rating) 
    for name in ([Engineering], [Financials], [Scope], 
       [Schedule], [Risks], [People]) 
) piv 

參見以下SQL Fiddle with Demo

結果:

| ENGINEERING | FINANCIALS | SCOPE | SCHEDULE | RISKS | PEOPLE | 
---------------------------------------------------------------- 
|   1 |   3 |  1 |  2 |  3 |  3 | 

以上將是正確的語法,因爲您有一行條目。現在,如果我稍微改變這個查詢,你會看到其中的差別:

樣本數據查詢2:我如果我執行PIVOT,包括這個ID領域增加了一個id領域本

CREATE TABLE yourtable([Name] varchar(11), [Rating] int, id int); 

INSERT INTO yourtable([Name], [Rating], id) 
VALUES 
    ('Engineering', 1, 1), 
    ('Financials', 3, 2), 
    ('Scope', 1, 3), 
    ('Schedule', 2, 4), 
    ('Risks', 3, 5), 
    ('People', 3, 6); 

,結果會看起來像你的。

PIVOT

select [Engineering], [Financials], [Scope], [Schedule], [Risks], [People] 
from 
(
    select name, rating, id -- notice the addition of the id column 
    from yourtable 
) src 
pivot 
(
    max(rating) 
    for name in ([Engineering], [Financials], [Scope], 
       [Schedule], [Risks], [People]) 
) piv 

SQL Fiddle with Demo

結果:

| ENGINEERING | FINANCIALS | SCOPE | SCHEDULE | RISKS | PEOPLE | 
------------------------------------------------------------------ 
|   1 |  (null) | (null) | (null) | (null) | (null) | 
|  (null) |   3 | (null) | (null) | (null) | (null) | 
|  (null) |  (null) |  1 | (null) | (null) | (null) | 
|  (null) |  (null) | (null) |  2 | (null) | (null) | 
|  (null) |  (null) | (null) | (null) |  3 | (null) | 
|  (null) |  (null) | (null) | (null) | (null) |  3 | 

正如你可以看到這個添加額外的列轉載你所得到的問題。我的建議是發佈你的表格結構,然後發佈你正在使用的查詢來獲得你的結果。從這一點,我們將能夠幫助你。

+0

+1,更多的信息確實會有幫助!前面的問題被發現[這裏](http://stackoverflow.com/questions/13744503/need-help-for-converting-results-of-a-column-into-a-single-row-in-sql-server )。 – Josien

+0

這是對這個'對角線'行爲的一個夢幻般的解釋。謝謝! –