T-Sql (Complex?) query

sql

Solution

If I understand you correctly you want something like this

SELECT * 
FROM   cards c 
       INNER JOIN carddetails cd 
         ON c.card_id = cd.card_id 
       INNER JOIN (SELECT cade_id, 
                          leve_id 
                   FROM   carddetails 
                   GROUP  BY cade_id, 
                             leve_id 
                   HAVING COUNT (card_id) > 1)dups 
         ON cd.cade_id = dups.cade_id 
            AND cd.leve_id = dups.leve_id 

Or if you like COUNT OVER

with dups as  (
SELECT 
   COUNT(CARD_ID)  OVER (PARTITION BY cade_id, leve_id) cardCount
   cade_id,
   leve_id
FROM  carddetails 
)
    SELECT * 
    FROM   cards c 
           INNER JOIN carddetails cd 
             ON c.card_id = cd.card_id 
           INNER JOIN  dups 
             ON cd.cade_id = dups.cade_id 
                AND cd.leve_id = dups.leve_id 
    WHERE cardCount > 1

Problem

I'm trying to make a query, but I can't find a way to do it. So I got 3 tables ``` Table Card (card_id) Table Level(leve_id, leve_desc) Table CardDetails(cade_id, card_id, leve_id) ``` So here is the problem : Each cards got a list of details. I want a query to count for each cards, the number of cards who have the exact same details, excluding the card it-self. Which means the same list of `leve_id`. Is it possible to achieve it in plain t-sql? I hope I have been clear enough, if not, I'll try to explain better what I need. Edit: I don't really need to know which cards it is for the moment, but it would sure credit bonus points if it did. Edit #2: So lets say table Card (card_id) 1,2,3,4,5,6 ``` Table level (leve_id, leve_desc) (1, Level 1), (2,Level 2), (3,Level 3), (4,Level 4), (5, Level5), (6, Level6) Table CardDetails (card_id, leve_id) (1, 1), (1, 3), (1, 4), (2, 1), (2, 2), (3, 1) (3, 3), (3, 4), (4, 5), (5, 1), (5, 2), (5, 3) (5, 4), (5, 5), (5, 6), (6, 1), (6, 3), (6, 4) ``` So, the result should be : ``` Card_id Nbr_Cards 1 .. 2 2 .. 0 3 .. 2 4 .. 0 5 .. 0 6 .. 2 ```

Original source