2013-07-29 26 views
3

我是SQL新手,很難搞清楚如何實現我正在嘗試執行的操作。目前我的測試人員通過我們的程序手動創建一個包含所有可能輸入的文件。我想要做的是創建一個存儲過程,它接收一些輸入表併爲它們設置每個可能的輸入。目前我有兩張桌子。首先是TestFileColumnHeaders具有兩列,ColumnID的和的ColumnName與格式在SQL Server中創建包含每個可能輸入的表格

ColumnID的的ColumnName
_ _ _ _ _ _ _ _ _
1的Foo
2酒吧
3巴茲

該表用於正在創建的輸入文件的標題。然後,我有一臺名爲TestFileColumnInfo的列ColumnID的和ColumnInfo與格式

ColumnID ColumnInfo 
_ _ _ _ _ _ _ _ _ 
1   Foo1 
1   Foo2 
2   Bar1 
2   Bar2 
3   Baz1 

我要爲我的pid輸出可能的輸入就像

富酒吧巴茲表
_ _ _ _ _ _
Foo1 BAR1 Baz1
Foo1 BAR2 Baz1
foo2的BAR1 Baz1
foo2的BAR2 Baz1

我嘗試了笛卡爾加入,但我不希望有Foo1和foo2的的輸出,所以我在哪裏卡住了,多數民衆贊成在同一行中顯示出來。僅適用於不限數量的標題和輸入。有沒有辦法在T-SQL中做到這一點?我是否需要將我的表格的設計更改爲其他內容?也很抱歉如果編輯關閉。我無法弄清楚如何保持我的頭正確的間距和underlineing

回答

3

你可以嘗試這樣的事情(簡版):

SELECT * FROM 
    (SELECT DISTINCT ColumnInfo AS foo 
    FROM TestFileColumnHeaders h 
    INNER JOIN dbo.TestFileColumnInfo i ON h.ColumnID = i.ColumnID 
    WHERE ColumnName = 'Foo') foo 
CROSS JOIN 
    (SELECT DISTINCT ColumnInfo AS bar 
    FROM TestFileColumnHeaders h 
    INNER JOIN dbo.TestFileColumnInfo i ON h.ColumnID = i.ColumnID 
    WHERE ColumnName = 'Bar') bar 
CROSS JOIN 
    (SELECT DISTINCT ColumnInfo AS baz 
    FROM TestFileColumnHeaders h 
    INNER JOIN dbo.TestFileColumnInfo i ON h.ColumnID = i.ColumnID 
    WHERE ColumnName = 'Baz') baz; 

SQLFiddle DEMO

如果列數是不固定的,你將不得不做一個動態的SQL。

+0

你真是太神奇了,我很遺憾,我缺乏提升你的聲望。感謝您幫助我擴展自己的SQL知識 –

相關問題