2015-05-19 61 views
0

我正在用Excel VBA進行SQL查詢。 下面是SQL字符串,我使用的是:Excel VBA - 如何透視SQL結果

SELECT DESC, SEQNUM, INSTRUCTION FROM TABLE 
WHERE DESC = 'ITEM1' AND SEQNUM <=3 

下面是查詢結果:

DESC SEQNUM INSTRUCTION 
ITEM1 1  002.000 
ITEM1 2  137.000 
ITEM1 3  005.000 

我怎樣才能讓查詢結果看起來是這樣的?

DESC SEQNUM1 SEQNUM2 SEQNUM3 
ITEM1 002.000 137.000 005.000 
+0

你使用Access或SQL?這[MS Article](https://support.office.com/en-za/article/Create-a-PivotTable-to-analyze-external-data-db50d01d-2e1c-43bd-bfb5-b76a818a927b)是否有效? – PaulFrancis

+0

我在Excel中編寫VBA代碼,它將從Oracle DB查詢數據並將結果返回到活動工作表以供分析。由於數據分析將通過VBA完成,因此在Excel中創建數據透視表並不會幫助... – cml

回答

0

如果支持 - 做一個自我完全外連接,ANSI SQL語法的位置:

select coalesce(t1.desc, t2.desc, t3.desc), 
     t1.INSTRUCTION SEQNUM1, 
     t2.INSTRUCTION SEQNUM2, 
     t3.INSTRUCTION SEQNUM3 
from (select * from TABLE where SEQNUM = 1) t1 
    full outer join (select * from TABLE where SEQNUM = 2) t2 on t1.desc = t2.desc 
    full outer join (select * from TABLE where SEQNUM = 3) t3 on t2.desc = t3.desc 
0

這樣,只要有一個DESC-SEQNUM每個

SELECT DESC, S1.INSTRUCTION, S2.INSTRUCTION, S3.INSTRUCTION 
FROM TABLE AS S1 INNER JOIN 
TABLE AS S2 ON S1.DESC = S2.DESC 
INNER JOIN TABLE AS S3 ON S3.DESC=S1.DESC 

對於Access SQL你可能需要封閉內部聯接喜歡這裏提到的: SQL multiple join statement 結果進行訪問SQL將是:

SELECT DESC, S1.INSTRUCTION, S2.INSTRUCTION, S3.INSTRUCTION 
FROM (TABLE AS S1 INNER JOIN 
TABLE AS S2 ON S1.DESC = S2.DESC) 
INNER JOIN TABLE AS S3 ON S3.DESC=S1.DESC 

正如在評論中提到的這個假設沒有遺漏給DESC的分配。 如果將你需要更改內部聯接到左的JOIN這樣

SELECT DESC, S1.INSTRUCTION, S2.INSTRUCTION, S3.INSTRUCTION 
FROM (TABLE AS S1 LEFT JOIN 
TABLE AS S2 ON S1.DESC = S2.DESC) 
LEFT JOIN TABLE AS S3 ON S3.DESC=S1.DESC 
+0

將使用提供的示例數據,但在缺少一個序列(或更多)時不會返回任何內容。 – jarlh

+0

正確。但只是需要時將相關的INNER JOIN改爲LEFT JOIN。 @cml沒有提供任何額外的輸入以假定可能需要這個 –

+0

嘗試所有3種方法,但沒有一種可行。不管怎麼說,還是要謝謝你 :) – cml