我有两张桌子。 表1:包含问题的Question_Master
id question
1 Q1
2 Q2
3 Q3
表2:包含选项的选项主文件
id option
1 H
2 N
3 S
我想要所有问题的所有选项组合。
像这样的东西
Q1 Q2 Q3
H H H
H H N
H H s
H N H
注意:两个表中都可以有任意数量的记录。如果在option_master中有4条记录,那么我想要4条记录的所有组合。
答案 0 :(得分:1)
您需要与自己交叉加入Option_Master。然后你需要再次使用Option_Master交叉加入结果。每个问题都必须重复这一点。我认为这必须通过动态创建SQL语句来完成。试试这个例子来了解一下:
text
阿尔伯特
答案 1 :(得分:1)
您可以使用一些字符串连接查询动态地根据Question_Master表值构建Select语句
DECLARE @SelectSQL VARCHAR(MAX),
@JoinSQL VARCHAR(MAX),
@OrderSQL VARCHAR(MAX)
SELECT @SelectSQL = COALESCE(@SelectSQL + ',', '')
+ QUOTENAME(question) + '.[option] as ' + QUOTENAME(question),
@JoinSQL = COALESCE(@JoinSQL + ' CROSS JOIN ', '')
+ 'Option_Master as ' + QUOTENAME(question),
@OrderSQL = COALESCE(@OrderSql + ',', '')
+ QUOTENAME(question) + '.[option]'
FROM Question_Master
ORDER BY question
DECLARE @Sql AS NVARCHAR(MAX) = N'SELECT ' + @SelectSQL + ' FROM ' + @JoinSQL + ' ORDER BY ' + @OrderSQL
EXECUTE sp_executesql @Sql;
使用QUOTENAME
将允许您在值中包含空格或其他字符的问题。