用子查询替换视图
我有一个包含以下数据的表:
ID | Date | MacroID | FunctionID
---------------------------------------
1 | 1.1.2010 10:00 | core | coreP1
2 | 2.1.2010 11:11 | main | mainP7
3 | 1.1.2010 17:01 | core | coreP2
4 | 3.1.2011 21:00 | top | topP7
5 | 1.1.2010 11:11 | left | leftP0
我需要获取:
Date | Sum_Macro |
----------------------
1.1.2010 | 2
2.1.2010 | 1
3.1.2010 | 1
其中: 对于任何 DISTINCT 日期(剥离时间),我需要 DISTINCT 宏出现次数的总和。 在 2010 年 1 月 1 日,宏核心和左侧运行,因此 2... 等
我可以使用视图来执行此操作,但我确信有更简单的方法:
CREATE VIEW Days_Macros AS
SELECT DISTINCT MacroID, COUNT(MacroID) AS MacroCnt, CONVERT(varchar, tStamp, 103) AS x
FROM TRADStatMacro
GROUP BY MacroID, CONVERT(varchar, tStamp, 103)
给我:
MacroID | MacroCnt | x
------------------------------
core | 2 | 1.1.2010
main | 1 | 2.1.2010
top | 1 | 3.1.2010
left | 1 | 1.1.2011
并比:
SELECT DISTINCT X, COUNT(MacroCnt) AS Y FROM Test
GROUP BY X
给我结果。 ...太复杂了,有人有想法吗?
谢谢
I have a table with this data:
ID | Date | MacroID | FunctionID
---------------------------------------
1 | 1.1.2010 10:00 | core | coreP1
2 | 2.1.2010 11:11 | main | mainP7
3 | 1.1.2010 17:01 | core | coreP2
4 | 3.1.2011 21:00 | top | topP7
5 | 1.1.2010 11:11 | left | leftP0
and I need to get:
Date | Sum_Macro |
----------------------
1.1.2010 | 2
2.1.2010 | 1
3.1.2010 | 1
where:
for any DISTINCT Date (stripped time) I need a sum of DISTINCT Macro occurrences.
At 1.1.2010 the Macro core and left was run, so 2... etc
I can do this using a view, but I'm sure there is more easy way:
CREATE VIEW Days_Macros AS
SELECT DISTINCT MacroID, COUNT(MacroID) AS MacroCnt, CONVERT(varchar, tStamp, 103) AS x
FROM TRADStatMacro
GROUP BY MacroID, CONVERT(varchar, tStamp, 103)
which gives me:
MacroID | MacroCnt | x
------------------------------
core | 2 | 1.1.2010
main | 1 | 2.1.2010
top | 1 | 3.1.2010
left | 1 | 1.1.2011
and than:
SELECT DISTINCT X, COUNT(MacroCnt) AS Y FROM Test
GROUP BY X
gives me the result.
...too complicated, ideas anybody?
Thanx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
示例数据:
查询(编辑,澄清后):
Sample data:
query (edit, after clarification):
为此,我倾向于使用 CTE(基本上都是内联视图)。看起来您正在使用 SQL Server,因此您可以这样做:
问题:您的意思是第二个
COUNT()
实际上是SUM()
?但是您的查询可以简化。如果您已经按使记录唯一的列进行分组,则不需要
DISTINCT
。除了聚合COUNT()
函数之外,您没有使用MacroId
字段,因此您可以消除它,并可能将所有内容简化为:I tend to be a fan of CTEs for this purpose (with are basically inline views). It looks like you're using SQL Server, so you could do this:
Questions: did you mean for the second
COUNT()
to actually be aSUM()
?But your query could be simplified. You don't need the
DISTINCT
if you're already grouping by the columns that make the record unique. And you aren't using theMacroId
field other than in the aggregateCOUNT()
function, so you could eliminate it and probably simplify everything down to: