아래 코드에 이상한 오류가 나타납니다. 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
)
해결하는 것은
아 당신이 Select
에 Count(*)
필요하지 않습니다 몰랐어요. 고마워요! 이것이 결국 내가 끝내게 된 것입니다. 당신은 그 두 번 둥지에 동일한 쿼리가 필요하지 않습니다
COUNT(*) AS RecordCount
는 사실, 당신도 당신이 된 ClientID에만 관심이있다, 당신은 HAVING 절에 COUNT (*)를 사용하는 등, 결과 집합에이 열을 필요가 없습니다 - 따라서 선택된 열로 반환 할 필요가 없습니다. – Sean
@MahmoudGamal 그는 HAVING 부분에 넣을 수 있으며 SELECT 부분에서 생략 할 수 있습니다. – Sean
불필요한 중첩 수준을 제거하여 쿼리를 더욱 향상시킬 수 있습니다. 당신은 현재 :'X X IN (SELECT X FROM (SELECT X GROUPBY + HAVING))'을 가지고 있습니다. 당신은 단지 :'X X (그룹 X + 그룹 선택)' – Sean