2017-07-28 76 views
0

所以我有下面的表(見下面),我想寫一個查詢來返回所有在三個票據列中都有以下內容的遊戲數字。SQL - 返回行數據的結果

E.G.給我所有的遊戲中有1,2和3的數字。

這些數字並不一定要在某些列(比如Ticket1等中的1)。他們只需要全部進入遊戲的行列。

我會發布我目前爲止的查詢,但它完全沒用,真的需要一雙新的眼睛來看看這是否可能,如果是這樣,如何?

enter image description here

+3

在我看來,這是一個糟糕的桌子設計。您可能需要一個非常難看的查詢來查找所有擁有1張,2張,3張在任何位置的門票的遊戲。當你發現自己寫難看的問題時,你應該對錶格設計提出質疑。相反,將每張票單獨存放在一行中。 –

+0

我同意表格設計可以更好,但OP可能沒有權限或能力進行這些更改。 –

+0

@TimBiegeleisen - 我同意這一點。你介意你的建議嗎? –

回答

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

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

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') 
0

我不明白確切的要求所以這裏有2種解釋:

要獲得具有相同的行中的確切數字1,2,3所有遊戲號碼:

從[表名]選擇遊戲 其中 Ticket1在(1,2,3)和Ticket2在(1,2,3)和Ticket3在(1,2,3)

要獲得具有相同的行中包含1,2,3值的所有遊戲的數字:

選擇遊戲 從[表名] 其中 (Ticket1 LIKE '%1%' 或Ticket1等(Ticket2 like'%1%'或Ticket2 like'%2%'or Ticket2 like'%3%') and(Ticket3 like'%1%') and(Ticket3 like'%1% '或Ticket3 like'%2%'或Ticket3 like'%3%')

0

@Andy的回答看起來是正確的,但希望您能看到在您的表格中使用它的麻煩CUR租金錶格。相反,我建議您將每個遊戲票證關係存儲在單獨的中。這是第一個六個記錄會是什麼樣與您當前的數據:

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