我是SQL的新手,并且很难弄清楚如何实现我想要做的事情。目前,我的测试人员手动创建一个文件,其中包含每个可能的输入以通过我们的程我想要做的是创建一个存储过程,它接受一些输入表并为它们设置每个可能的输入。目前我有两张桌子。第一个是TestFileColumnHeaders,它有两列,ColumnID和ColumnName,格式为
ColumnID ColumnName
_ _ _ _ _ _ _ _
1 Foo
2栏
3 Baz
此表用于正在创建的输入文件的标题。然后我有一个名为TestFileColumnInfo的可能输入表,其列ColumnID和ColumnInfo格式为
ColumnID ColumnInfo _ _ _ _ _ _ _ _ _ 1 Foo1 1 Foo2 2 Bar1 2 Bar2 3 Baz1
我想要的proc输出是一个像
这样的表Foo Bar Baz
_ _ _ _ _ _
Foo1 Bar1 Baz1
Foo1 Bar2 Baz1
Foo2 Bar1 Baz1
Foo2 Bar2 Baz1
我尝试过笛卡尔连接,但我不想让Foo1和Foo2出现在输出的同一行中,这就是我被卡住的地方。仅适用于无限数量的标头和输入。有没有办法在T-SQL中执行此操作?我是否需要将表格的设计更改为其他内容?对不起如果编辑关闭。我无法弄清楚如何保持标题的正确间距和下划线
答案 0 :(得分: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。