我有这个查询显示
有2个表格,我将从表格翻新中获得翻新的数量,而客户ID和名称来自表格1,客户。
SELECT c.[Customer-ID], c.name, COUNT(*)"Number of Renovation"
FROM CUSTOMER c, RENOVATION r
WHERE c.[Customer-ID] = r.[Customer-ID]
GROUP BY c.[Customer-ID], c.name
HAVING Count(*) in
(SELECT COUNT(*) FROM RENOVATION GROUP BY [Customer-ID])
ORDER BY c.[customer-id]
这不是我查询的正确方法,有人知道如何缩短查询吗?或其他方式吗?虽然它仍然找到答案。我顺便学习SQL服务器。
答案 0 :(得分:5)
好的,所以你想要客户和装修 - 为什么不使用:
SELECT c.[Customer-ID], c.name, COUNT(*) AS 'Number of Renovations'
FROM dbo.CUSTOMER c
INNER JOIN dbo.RENOVATION r ON c.[Customer-ID] = r.[Customer-ID]
GROUP BY c.[Customer-ID], c.name
我不太明白您在查询的HAVING COUNT(*) IN......
部分尝试实现的目标......
如果您希望所有客户至少进行一次翻新,请尝试以下方法:
SELECT c.[Customer-ID], c.name, COUNT(*) AS 'Number of Renovations'
FROM dbo.CUSTOMER c
INNER JOIN dbo.RENOVATION r ON c.[Customer-ID] = r.[Customer-ID]
GROUP BY c.[Customer-ID], c.name
HAVING COUNT(*) > 0
答案 1 :(得分:3)
HAVING
子句似乎不属于此处。 HAVING
旨在根据汇总结果过滤掉结果组。例如,您可以使用HAVING子句排除没有任何装修的记录:
SELECT c.[Customer-ID], c.name, COUNT(*) AS [Number of Renovations]
FROM dbo.CUSTOMER c
INNER JOIN dbo.RENOVATION r ON c.[Customer-ID] = r.[Customer-ID]
GROUP BY c.[Customer-ID], c.name
HAVING COUNT(*) > 0
答案 2 :(得分:0)
我不建议新手使用HAVING
关键字,它是essentially for legacy purposes。
以下内容比较详细,但可以更容易理解,因此可以维护(我已经使用CTE表格CUSTOMER_RENOVATION_TALLIES
但它可能是VIEW
:
WITH CUSTOMER_RENOVATION_TALLIES ("Customer-ID", Tally)
AS
(
SELECT [Customer-ID], COUNT(*) AS Tally
FROM RENOVATION
GROUP
BY [Customer-ID]
)
SELECT c."Customer-ID", c.name, r.Tally
FROM CUSTOMER AS c
INNER JOIN CUSTOMER_RENOVATION_TALLIES AS r
ON c."Customer-ID" = r."Customer-ID";
如果您希望在没有装修的情况下为客户添加零计数,则UINON
将此设置为上述结果集,例如
WITH CUSTOMER_RENOVATION_TALLIES ("Customer-ID", Tally)
AS
(
SELECT [Customer-ID], COUNT(*) AS Tally
FROM RENOVATION
GROUP
BY [Customer-ID]
)
SELECT c."Customer-ID", c.name, r.Tally
FROM CUSTOMER AS c
INNER JOIN CUSTOMER_RENOVATION_TALLIES AS r
ON c."Customer-ID" = r."Customer-ID"
UNION
SELECT c."Customer-ID", c.name, 0 AS Tally
FROM CUSTOMER AS c
WHERE NOT EXISTS (
SELECT *
FROM CUSTOMER_RENOVATION_TALLIES AS r
WHERE c."Customer-ID" = r."Customer-ID"
);
答案 3 :(得分:0)
尝试以下查询,
select table1.id,table1.name,renovation .mobile_no from table1,renovation where table1.id=renovation.id