【问题标题】:Create a table with every possible input in SQL Server在 SQL Server 中创建包含所有可能输入的表
【发布时间】:2013-07-29 00:40:35
【问题描述】:

我是 SQL 新手,很难弄清楚如何实现我想要做的事情。目前,我的测试人员手动创建一个文件,其中包含所有可能的输入以通过我们的程序。我想要做的是创建一个存储过程,它接收一些输入表并为它们设置每个可能的输入。目前我有两张桌子。第一个是 TestFileColumnHeaders,有两列,ColumnID 和 ColumnName,格式为

ColumnID 列名
_ _ _ _ _ _ _ _ _
1 Foo
2 酒吧
3巴兹

此表用于正在创建的输入文件的标题。然后我有一个可能的输入表,称为 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 中做到这一点?我需要将桌子的设计更改为其他东西吗?也很抱歉,如果编辑关闭。我不知道如何为我的标题和下划线保持正确的间距

【问题讨论】:

    标签: sql sql-server-2005 testing


    【解决方案1】:

    你可以试试这样的(简单版):

     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。

    【讨论】:

    • 你太棒了,我很遗憾我缺乏支持你的声誉。感谢您帮助我扩展 SQL 知识
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2020-02-28
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多