我在下面的代碼中遇到了一個奇怪的錯誤。 No column was specified for column 2 of 'no1'.
據我可以告訴它應該工作。我只是試圖獲得關於客戶在收據tbl上不止一次存在的客戶的詳細信息。抓取出現多次的客戶的詳細信息
SELECT
CM.ClientID,
CPN.Birthdate,
CM.ClientPassword
FROM
dbo.ClientMaster AS CM
JOIN dbo.ClientPerson AS CPN ON (CM.ClientID = CPN.ClientID)
JOIN dbo.ClientProduct AS CP ON (CPN.ClientID = CP.ClientID)
WHERE
CM.ClientID IN (
SELECT
no1.ClientID
FROM
(
SELECT
CM.ClientID,
COUNT(*)
FROM
dbo.ClientMaster AS CM
JOIN dbo.ClientPerson AS CPN ON (CM.ClientID = CPN.ClientID)
JOIN dbo.ClientProduct AS CP ON (CPN.ClientID = CP.ClientID)
WHERE
CP.PolicyNo IN (SELECT PolicyNo FROM Receipts)
AND CM.ClientID IS NOT NULL
AND Birthdate IS NOT NULL
AND ClientPassword IS NOT NULL
GROUP BY
CM.ClientID
HAVING
COUNT(*)>1
) AS no1
)
SOLUTION
啊沒想到你不需要Count(*)
在Select
。多謝你們! 這就是我最終選擇的。
SELECT DISTINCT
CM.ClientID,
CPN.Birthdate,
CM.ClientPassword
FROM
dbo.ClientMaster AS CM
JOIN dbo.ClientPerson AS CPN ON (CM.ClientID = CPN.ClientID)
JOIN dbo.ClientProduct AS CP ON (CPN.ClientID = CP.ClientID)
WHERE
CM.ClientID IN (
SELECT
ClientID
FROM
Receipts
GROUP BY
ClientID
HAVING
COUNT(*)>1
)
AND CM.ClientID IS NOT NULL
AND Birthdate IS NOT NULL
AND ClientPassword IS NOT NULL
事實上,你甚至不需要此列在結果集中,因爲你只ClientID的興趣,而你在HAVING子句中使用COUNT(*) - 所以不需要將它作爲選定的列返回 – Sean
@MahmoudGamal他可以將它放在HAVING部分中,並從SELECT部分省略它。 – Sean
您可以通過刪除不必要的嵌套級別來進一步改善查詢。你目前得到:'WHERE X in(SELECT X FROM(SELECT X GROUPBY + HAVING))'。你只需要:'在哪裏X(SELECT X GROUPBY + HAVING)' – Sean