由於您使用SQL 2008
,我將採取Common Table Expressions,又名熱膨脹係數的優勢,裝配數據。
首先,我們需要一些測試數據。注意:我已經拋出了一些「異常值」,以便您可以看到這種邏輯在哪裏可以咬你。
DECLARE @CustomerTypes TABLE
(
CustomerTypeID INT,
[Customer Type] VARCHAR(100)
)
INSERT INTO @CustomerTypes
SELECT 1, 'TypeA'
UNION SELECT 2, 'TypeB'
UNION SELECT 3, 'TypeC' --NOTE: An outlier (not in customers-collection)
UNION SELECT 4, 'TypeD' --NOTE: An outlier (not in customers)
DECLARE @Customers TABLE
(
CustomerID INT,
CustomerTypeID INT
)
INSERT INTO @Customers
SELECT 1, 1
UNION SELECT 2, 1
UNION SELECT 3, 1
UNION SELECT 4, 2
UNION SELECT 5, 2
UNION SELECT 6, 2
UNION SELECT 7, 3
DECLARE @CustomersCollection TABLE
(
CollectionID INT IDENTITY(1,1),
CustomerID INT
)
INSERT INTO @CustomersCollection
(CustomerID)
SELECT TOP 2 --INSERT 2 of 3
CustomerID FROM @Customers WHERE CustomerTypeID = 1 --TypeA
INSERT INTO @CustomersCollection
(CustomerID)
SELECT TOP 1 --INSERT 1 of 3
CustomerID FROM @Customers WHERE CustomerTypeID = 2 --TypeB
其次,組裝CTE數據,並生成輸出
;WITH CTE_COUNT_TYPE(CustomerTypeID, TypeCount)
AS
(
SELECT CustomerTypeID, COUNT(1)
FROM @Customers
GROUP BY CustomerTypeID
)
--SELECT * FROM CTE_COUNT_TYPE --DEBUG
,
CTE_COUNT_COLLECTION(CustomerTypeID, CollectionCount)
AS
(
SELECT CustomerTypeID, COUNT(1)
FROM @CustomersCollection CC
INNER JOIN @Customers C
ON CC.CustomerID = C.CustomerID
GROUP BY CustomerTypeID
)
--SELECT * FROM CTE_COUNT_COLLECTION --DEBUG
SELECT [Customer Type],
--CONVERT is necessary to combine INT data type (i.e. Count) and VARCHAR data type (i.e. 'as')
CONVERT(VARCHAR(100), COALESCE(CCC.CollectionCount, 0)) +
' of ' +
CONVERT(VARCHAR(100), COALESCE(CCT.TypeCount, 0)) As [Count in Collection]
FROM @CustomerTypes CT
LEFT OUTER JOIN @Customers C --Left outer join assists in outliers
ON CT.CustomerTypeID = C.CustomerTypeID
LEFT OUTER JOIN CTE_COUNT_TYPE CCT --Left outer join assists in outliers
ON CCT.CustomerTypeID = CT.CustomerTypeID
LEFT OUTER JOIN CTE_COUNT_COLLECTION CCC --Left outer join assists in outliers
ON CCC.CustomerTypeID = CT.CustomerTypeID
GROUP BY CT.[Customer Type]
, CCC.CollectionCount
, CCT.TypeCount
的樣本數據而表格形式的理想結果將真正幫助傳達wha你想要做什麼。 –
@TabAlleman我不是在說我需要什麼。我在問如何去選擇sql server中的「count count」列。這篇文章肯定可以幫助其他人,因爲我的例子很好解釋。 –
我不同意你的例子很好解釋。相反,它缺乏足夠的細節讓任何人提供答案。我懷疑這個代碼並不複雜,但沒有任何細節可以與它一起工作,任何人都會猜測你在這裏做什麼。我已經多次閱讀過這個問題,但目前尚不清楚。這將是一個很好的開始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –