我的查询返回31行“private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello {0}", textBox1.Text);
}
”。即便如此,我正在做1
。
我取出COUNT()
,它返回了31行status_number。所以它返回了我期望的正确数量的结果,但是如何强制它返回31而不是31行“COUNT()
”。
1
目前正在返回:
SELECT
COUNT(DISTINCT d.status_number)
FROM dealers d
INNER JOIN contracts c ON d.status_number= c.status_number
WHERE d.iagent_id = 79 AND d.status_code IN ('A', 'R')
AND d.status_number NOT LIKE '%demo%'
AND c.sale_date > DATEADD(MONTH, -4, GETDATE())
GROUP BY d.status_number
HAVING COUNT(DISTINCT c.sale_date ) >= 5
需要它返回:
(No column name)
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
(No column name)
31
是用户列表,status_number是系统中唯一的标识号。 status_code是它们是活动/非活动等等。
Table d
是合同销售清单。我试图仅返回过去4个月内已售出5个或更多合同的用户数。
返回31的查询是正确的结果。
答案 0 :(得分:1)
我猜你想要这样的东西:
SELECT COUNT(*)
FROM (SELECT d.status_number
FROM dealers d INNER JOIN
contracts c
ON d.status_number = c.status_number
WHERE d.iagent_id = 79 AND d.status_code IN ('A', 'R') AND
d.status_number NOT LIKE '%demo%' AND
c.sale_date > DATEADD(MONTH, -4, GETDATE())
GROUP BY d.status_number
HAVING COUNT(DISTINCT c.sale_date ) >= 5
) cd;
也就是说,您需要两个聚合,因此您需要使用子查询,CTE或一些相关构造进行两次聚合。您的查询在外部查询中不需要COUNT(DISTINCT)
,因为status_number
已使GROUP BY
已经不同。
答案 1 :(得分:1)
试试这个:
SELECT COUNT(DISTINCT d.status_number)
FROM dealers od
where exists
(Select * from dealers d
JOIN contracts c
ON c.status_number= d.status_number
WHERE d.status_number = od.status_number
and d.iagent_id = 79
AND d.status_code IN ('A', 'R')
AND d.status_number NOT LIKE '%demo%'
AND c.sale_date > DATEADD(MONTH, -4, GETDATE())
group by status_number
HAVING COUNT(DISTINCT c.sale_date ) >= 5)
答案 2 :(得分:0)
根据状态编号分组后,您可以计算出您拥有的状态编号的数量,当然,您将获得大量的1。
如果您想要计算不同的状态编号,请从查询中删除group by
子句。
如果您想要计算每个不同状态号的行数,请删除计数中的distinct
子句。