SQL - 返回行数据的结果

时间:2017-07-28 05:28:55

标签: sql sql-server-2008

所以我有下表(见下文),我想编写一个查询,以便返回所有三个故障单列中包含以下内容的所有游戏编号。

E.G。给我所有包含1,2和3的游戏数字。

这些数字并不特定必须在某些列中(如Ticket1等中的1 ......)。他们只需要参加游戏排。

到目前为止,我发布了我的查询内容,但它完全没用,真的需要一双新眼睛看看这是否可行,如果可行,怎么样?

enter image description here

5 个答案:

答案 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