Sql server 使用cartisan产品创建无重复问题的比较列表
我正在编写一个查询,它将用于生成一个测试列表,其中每个项目都将与任何其他项目进行比较,然后是一个向上或向下的项目。例如,列出三个项目:Sql server 使用cartisan产品创建无重复问题的比较列表,sql-server,view,Sql Server,View,我正在编写一个查询,它将用于生成一个测试列表,其中每个项目都将与任何其他项目进行比较,然后是一个向上或向下的项目。例如,列出三个项目: 小狗 电影 在公园散步 阅读 考试会问你是否喜欢 小狗或电影 小狗或在公园散步 小狗还是读书 看电影还是在公园散步 电影还是阅读 在公园散步或读书 使用CREATEVIEW查询,我几乎可以得到这个结果 CREATE VIEW testquestionsvw AS select t1.testItem AS firstItem,
- 小狗
- 电影
- 在公园散步
- 阅读
CREATE VIEW testquestionsvw AS
select t1.testItem AS firstItem,
t2.testItem AS secondItem
from testcontents t1 JOIN testcontents t2 on t1.testItem != t2.testItem;
但它有重复问题的问题。它会问:
电影还是小狗
然后
小狗或电影
我知道有一种优雅的方式来编写查询,不必这样做,每个问题只问一次,但我最近没有做太多SQL,所以我还是一无所获。我可以在测试程序中处理它,而不是在这里,但这似乎更尴尬 您可以分配行号并执行
连接
:
您的情况目前检查两个项目是否不同,因此每次组合都会出现两次(
x,y
和y,x
)。解决这个问题最简单的方法就是任意决定总是将第一项(按字典顺序)放在左边:
CREATE VIEW testquestionsvw AS
SELECT t1.testItem AS firstItem,
t2.testItem AS secondItem
FROM testcontents t1
JOIN testcontents t2 ON t1.testItem < t2.testItem;
CREATE VIEW testquestionsvw AS
选择t1.testItem作为第一项,
t2.作为第二项的测试项目
来自testcontents t1
在t1.testItem
(当然,你可以做出相反的任意决定,使用
而不是你不能在视图中使用ORDER BY,但我可以将其用作caned查询,基本上也一样好。我知道有一个简单的解决方案,抱歉垒球问题。你是对的。我忘了它应该在视图中。无论如何,很高兴我能帮上忙。
CREATE VIEW testquestionsvw AS
SELECT t1.testItem AS firstItem,
t2.testItem AS secondItem
FROM testcontents t1
JOIN testcontents t2 ON t1.testItem < t2.testItem;