我真的为此感到挣扎。
SELECT t1.servizio,
Count(DISTINCT p.pro_id),
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%M' THEN p.pro_id
END) AS 'M',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%F' THEN p.pro_id
END) AS 'F',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%Si' THEN
p.pro_id
END) AS 'prov_si',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%No' THEN
p.pro_id
END) AS 'prov_no',
Count(DISTINCT t1.pronto_request_id),
Count(t2.quote_id)
FROM pro p,
pro_request pr,
request_servizio t1
JOIN (SELECT request_servizio.servizio,
Count(quote_request.quote_id)
FROM request_servizio,
quote_request
WHERE request_servizio.pronto_request_id =
quote_request.pronto_request_id
GROUP BY request_servizio.servizio) AS t2
ON t1.servizio = t2.servizio
WHERE p.pro_id = pr.pro_id
AND pr.pronto_request_id = t1.pronto_request_id
GROUP BY t1.servizio
基本上,我涉及4个表:request_servizio
,pro
,pro_request
和quote_request
。
问题出在最后选择的列上:
错误是“未知列t2.quote_id ...”
但是t2
是联接的别名。那么,为什么我会收到此错误?
我试图包括表quote_request
,该表是您可以找到最后一个属性的表,但是那时我得到了错误的汇总。如何避免这种情况?
提前谢谢!
答案 0 :(得分:0)
在JOIN中,您使用的子查询没有提供quote_id列,这意味着您不能从别名t2引用它,因为在选择部分的内部子查询中未提供该别名。您只能使用内部查询提供的内容。
我想说将查询更改为此,因为您似乎已经拥有要使用的计数。
SELECT t1.servizio,
Count(DISTINCT p.pro_id),
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%M' THEN p.pro_id
END) AS 'M',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%F' THEN p.pro_id
END) AS 'F',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%Si' THEN
p.pro_id
END) AS 'prov_si',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%No' THEN
p.pro_id
END) AS 'prov_no',
Count(DISTINCT t1.pronto_request_id),
Count(t2.CountOfQuoteId) --edit here
FROM pro p,
pro_request pr,
request_servizio t1
JOIN (SELECT request_servizio.servizio,
Count(quote_request.quote_id) AS CountOfQuoteId --edit here
FROM request_servizio,
quote_request
WHERE request_servizio.pronto_request_id =
quote_request.pronto_request_id
GROUP BY request_servizio.servizio) AS t2
ON t1.servizio = t2.servizio
WHERE p.pro_id = pr.pro_id
AND pr.pronto_request_id = t1.pronto_request_id
GROUP BY t1.servizio
您还可以将这些联接更改为较新的标准,它更干净,更易于使用。