2015-11-04 59 views
0

我無法使SQL查詢的輸出成爲我希望的格式。現在,我有幾個查詢,我在哪裏自行連接到一個表比較符合我的標準的帳戶的記錄。一個簡單的例子看起來是這樣的:在SQL Server 2012或Excel 2013中格式化結果

SELECT a.Field1 
     ,a.Field2 
     ,a.Field3 
     ,b.Field1 
     ,b.Field2 
     ,b.Field3 
FROM Table1 a 
JOIN Table1 b 
    ON a.Field = b.Field 

a和b的輸出在同一行,我想試着讓它們堆疊在一起。有時候有1000條記錄被返回。有沒有一種簡單的方法讓b字段堆積在相應的字段下?經過一番研究後,我無法弄清楚這樣做的有效方式,這不是完全手動且耗時的。

編輯:

我對第一篇文章缺乏信息表示歉意。這是我的一個查詢的一個更好的表示形式。

SELECT DISTINCT a.ID 
       ,a.Field1 
       ,a.Field2 
       ,a.Field3 
       ,a.Field4 
       ,a.Field5 
       ,a.Field6 
       ,b.ID 
       ,b.Field1 
       ,b.Field2 
       ,b.Field3 
       ,b.Field4 
       ,b.Field5 
       ,b.Field6    
    FROM Table1 a 
    JOIN Table1 b 
     ON a.somefield = b.somefield 
     AND a.anotherfield = b.anotherfield 
    WHERE a.ID > b.ID 
    AND a.thisfield <> b.thisfield 
    AND a.field1 = 'something' 
    AND b.field1 = 'something' 

給定的標準,其中一些字段不一定相等的情況下仍然是最合乎邏輯的方式的聯合?

+1

你可以添加示例數據和預期的輸出 –

+0

聽起來像你想要一個聯盟,而不是一個聯接。 –

回答

1

有沒有簡單的方法讓b字段堆積在 下對應的字段?

SELECT 
     Field1 
     ,Field2 
     ,Field3 
FROM (
SELECT 
     a.Field1 
     ,a.Field2 
     ,a.Field3 
     ,a.Field 
FROM Table1 a 
UNION ALL 
SELECT 
     b.Field1 
     ,b.Field2 
     ,b.Field3 
     ,b.Field 
FROM Table1 b 
) t 
ORDER BY Field ASC 

編輯按照原來的問題編輯:

你需要使用UNION得到你想要的格式,但我將開始與當前查詢的CTE和使用UNION是從它吸引,就像這樣:

WITH cte AS (
SELECT DISTINCT a.ID  AS A_ID 
       ,a.Field1 AS A_Field1 
       ,a.Field2 AS A_Field2 
       ,a.Field3 AS A_Field3 
       ,a.Field4 AS A_Field4 
       ,a.Field5 AS A_Field5 
       ,a.Field6 AS A_Field6 
       ,b.ID  AS B_ID 
       ,b.Field1 AS B_Field1 
       ,b.Field2 AS B_Field2 
       ,b.Field3 AS B_Field3 
       ,b.Field4 AS B_Field4 
       ,b.Field5 AS B_Field5 
       ,b.Field6 AS B_Field6 
    FROM Table1 a 
    JOIN Table1 b 
     ON a.somefield = b.somefield 
     AND a.anotherfield = b.anotherfield 
    WHERE a.ID > b.ID 
    AND a.thisfield <> b.thisfield 
    AND a.field1 = 'something' 
    AND b.field1 = 'something' 
) 
    SELECT 
    A_ID 
    ,B_ID 
    ,A_Field1 
    ,A_Field2 
    ,A_Field3 
    ,A_Field4 
    ,A_Field5 
    ,A_Field6 
    FROM cte 
    UNION ALL 
    SELECT 
    A_ID 
    ,B_ID 
    ,B_Field1 
    ,B_Field2 
    ,B_Field3 
    ,B_Field4 
    ,B_Field5 
    ,B_Field6 
    FROM cte 
    ORDER BY A_ID, B_ID 

如果你絕對要疊加在結果彼此頂部的ID列,那麼你就需要把UNION以上派生表像我一樣在我的第一個例子。但是你需要在UNION查詢中使用這兩個ID來獲得行順序。

+0

這兩個語句中的「ORDER BY」都會出現語法錯誤。 – Tom

+0

你說得對,我認爲TOP子句阻止了這個錯誤,但它沒有。我將編輯。 –

+0

所以我做了一個更接近代表我想用它的查詢類型。我曾嘗試將工會標準放在工會之外,但這不起作用。我唯一的選擇是將我的整個查詢放在from子句中,並使用一個聯合體,我只選擇頂部的'a'字段和底部的'b'字段?離開這個聯盟,並且在聯盟中的兩個關鍵點都參與其中? – hbj