所以我有下表(见下文),我想编写一个查询,以便返回所有三个故障单列中包含以下内容的所有游戏编号。
E.G。给我所有包含1,2和3的游戏数字。
这些数字并不特定必须在某些列中(如Ticket1等中的1 ......)。他们只需要参加游戏排。
到目前为止,我发布了我的查询内容,但它完全没用,真的需要一双新眼睛看看这是否可行,如果可行,怎么样?
答案 0 :(得分:3)
E.G。给我所有包含1,2 和 3的游戏数字。
这些数字并不一定要在某些列中(如Ticket1等中的1 ......)。他们只需要在游戏的所有行中。
select Game
from [table-name]
where
(Ticket1 ='1' and Ticket2 ='2' and Ticket3 ='3') or
(Ticket1 ='1' and Ticket2 ='3' and Ticket3 ='2') or
(Ticket1 ='2' and Ticket2 ='1' and Ticket3 ='3') or
(Ticket1 ='2' and Ticket2 ='3' and Ticket3 ='1') or
(Ticket1 ='3' and Ticket2 ='1' and Ticket3 ='2') or
(Ticket1 ='3' and Ticket2 ='2' and Ticket3 ='1')
返回443。
答案 1 :(得分:0)
您可以执行以下操作
select * from Table1
where (
cast(Ticket1 as varchar(100))
+ ',' +
cast(Ticket2 as varchar(100))
+ ',' +
cast(Ticket3 as varchar(100))) in
('1,2,3','1,3,2','2,1,3','2,3,1','3,1,2','3,2,1')
答案 2 :(得分:0)
将条件计数交叉应用于故障单联合。
select *
from myTable
cross apply (
select count(case when ticket in (1,2,3) then ticket end) cnt
from (
select Ticket1 ticket
union
select Ticket2 ticket
union
select Ticket3 ticket
) t
) t
where t.cnt = 3
答案 3 :(得分:0)
我没有理解确切的要求所以这里有两种解释:
要获得同一行中具有确切数字1,2,3的所有游戏数字:
选择游戏 来自[table-name] 哪里 (1,2,3)中的Ticket1和(1,2,3)中的Ticket2以及(1,2,3)中的Ticket3
获取同一行中包含1,2,3的所有游戏数字:
选择游戏 来自[table-name] 哪里 (Ticket1喜欢'%1%'或Ticket1喜欢'%2%'或Ticket1喜欢'%3%') 和(Ticket2喜欢'%1%'或Ticket2喜欢'%2%'或Ticket2喜欢'%3%') 和(Ticket3喜欢'%1%'或Ticket3喜欢'%2%'或Ticket3喜欢'%3%')
答案 4 :(得分:0)
@Andy的答案看起来是正确的,但希望你能看到以现有形式使用你的桌子会有什么麻烦。相反,我建议您将每个游戏票关系存储在单独的行中。以下是您当前数据的前六条记录:
Game | Ticket
443 | 1
443 | 2
443 | 3
444 | 57
444 | 13
444 | 33
现在很容易识别出具有三张特定票证的所有游戏,例如
SELECT Game
FROM yourTable
WHERE Ticket IN (1, 2, 3)
GROUP BY Game
HAVING COUNT(DISTINCT Ticket) = 3