के भीतर प्रत्येक शर्त की गणना करें प्रत्येक अद्वितीय GroupId
के लिए मैं प्रत्येक IsGreen
, IsRound
, IsLoud
स्थिति और पंक्तियों की कुल संख्या की गिनती प्राप्त करना चाहता हूं।समूह
नमूना डेटा:
-----------------------------------------------------
id | ItemId | GroupId | IsGreen | IsRound | IsLoud
----+--------+---------+---------+---------+---------
1 | 1001 | 1 | 0 | 1 | 1
2 | 1002 | 1 | 1 | 1 | 0
3 | 1003 | 2 | 0 | 0 | 0
4 | 1004 | 2 | 1 | 0 | 1
5 | 1005 | 2 | 0 | 0 | 0
6 | 1006 | 3 | 0 | 0 | 0
7 | 1007 | 3 | 0 | 0 | 0
वांछित परिणाम:
----------------------------------------------------------
GroupId | TotalRows | TotalGreen | TotalRound | TotalLoud
--------+-----------+------------+------------+-----------
1 | 2 | 1 | 2 | 1
2 | 3 | 1 | 0 | 1
3 | 2 | 0 | 0 | 0
मैं तालिका बनाने के लिए निम्नलिखित कोड का उपयोग कर रहा है, समस्या मैं आ रही है कि यदि कोई समूहों में से कोई पंक्ति नहीं है जो कि उन शर्तों में से एक से मेल खाती है जो समूह अंतिम तालिका में प्रकट नहीं होते हैं। मैं जो करना चाहता हूं उसे पूरा करने का सबसे अच्छा तरीका क्या है?
SELECT total.GroupId
, total.[Count] AS TotalRows
, IsGreen.[Count] AS TotalGreen
, IsRound.[Count] AS TotalRound
, IsLoud.[Count] AS TotalLoud
FROM (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
GROUP BY GroupId
) TotalRows
INNER JOIN (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
WHERE IsGreen = 1
GROUP BY GroupId
) IsGreen ON IsGreen.GroupId = TotalRows.GroupId
INNER JOIN (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
WHERE IsRound = 1
GROUP BY GroupId
) IsRound ON IsRound.GroupId = TotalRows.GroupId
INNER JOIN (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
WHERE IsLoud = 1
GROUP BY GroupId
) IsLoud ON IsLoud.GroupId = TotalRows.GroupId
क्यों यह एक सरल 'groupID' द्वारा समूह और एक' count' और 'योग नहीं है?' – xQbert
आपका कोड ठीक काम करेगा अगर आप बदल सभी आंतरिक मिलती करने के लिए वाम बाहरी मिलती है। – Matt