我有一张桌子上有几张"票"记录在里面。每张票都按天存储(即2011-07-30 00:00:00.000)我想按年计算每个月的唯一记录我使用了以下sql语句
SELECT DISTINCT
YEAR(TICKETDATE) as TICKETYEAR,
MONTH(TICKETDATE) AS TICKETMONTH,
COUNT(DISTINCT TICKETID) AS DAILYTICKETCOUNT
FROM
NAT_JOBLINE
GROUP BY
YEAR(TICKETDATE),
MONTH(TICKETDATE)
ORDER BY
YEAR(TICKETDATE),
MONTH(TICKETDATE)
这确实产生了一个计数,但它错了,因为它每天都会获取唯一的门票。我只想要一个月的独特计数。
答案 0 :(得分:0)
尝试将Year和Month组合到一个字段中,并对该新字段进行分组。 您可能必须将它们转换为varchar以确保它们不会简单地添加到一起。或者......你可以在一年中多次......
SELECT
(YEAR(TICKETDATE) * 100) + MONTH(TICKETDATE),
count(*) AS DAILYTICKETCOUNT
FROM NAT_JOBLINE GROUP BY
(YEAR(TICKETDATE) * 100) + MONTH(TICKETDATE)
答案 1 :(得分:0)
假设TICKETID
不是主键或唯一键,但在表NAT_JOBLINE
中多次出现,则该查询应该有效。如果它是唯一的(每个值不超过1行),则需要在不同的列上进行选择,该列唯一标识要计数的“实体”,如果不是每个出现/实例/参考那个实体。
(与以往一样,如果不使用实际数据,很难判断。)
答案 2 :(得分:0)
我认为你需要删除第一个不同的。你已经有了这个小组。如果我是第一个Distict,我会对我应该做的事情感到困惑。
SELECT
YEAR(TICKETDATE) as TICKETYEAR,
MONTH(TICKETDATE) AS TICKETMONTH,
COUNT(DISTINCT TICKETID) AS DAILYTICKETCOUNT
FROM NAT_JOBLINE
GROUP BY YEAR(TICKETDATE), MONTH(TICKETDATE)
ORDER BY YEAR(TICKETDATE), MONTH(TICKETDATE)
答案 3 :(得分:0)
从我对你的评论的理解到Phillip Kelley的解决方案:
SELECT TICKETDATE, COUNT(*) AS DAILYTICKETCOUNT
FROM NAT_JOBLINE
GROUP BY TICKETDATE
应该这样做,但我建议你更新你的问题。