【发布时间】:2021-08-25 01:32:57
【问题描述】:
我正在尝试各种方法来实现这种结果:
问题是从 202001 年开始没有 F。
我创建了 cteTable 并在主选择中加入了他们的公共字段,但它没有给出我预期的输出。左是当前行为,而右是我的预期输出。数量是我的 cteTable 中日期范围 (datefrom - dateto) 的天数。
SELECT GroupID, Gender, COUNT(d) as Quantity, Period
FROM table1
GROUP BY GroupID, Gender, Quantity, Period
【问题讨论】:
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
为确保每一行都有一个值,您需要一个日历或统计表,您可以在其中构建一个返回所需行的查询,然后加入您的结果。 Example
-
翻译 - 你需要一个所有性别的“表格”和一个所有时期的“表格”。交叉连接这两个然后将结果外部连接到您的实际表(方便地命名为 table1 - 真的吗?)。现在你如何得到所有可能值的这两张表?在您思考的同时,开始使用最佳实践。使用语句终止符。通常行的顺序很重要 - 所以添加适当的 ORDER BY 子句。
-
尝试 GROUP BY 数量是没有意义的,因为这是由 COUNT 计算的值(您将其别名为“数量”-您肯定没有名为数量的列吗?)。似乎您有更多问题,因为您的计数(如所需输出中所列)应该评估为 1(1234,M,20201)而不是 5。但也许您根本不想聚合?
-
谢谢伙计。这正是我的问题。我问了上面的问题以快速发布。我在主查询中有这个参数,我有 execquery 来创建临时日历表。它们具有相同的月数和年数。所以我在 maintable 和日历表中比较这些值。 ``` Select * from (Select 'M' SEX, * from calendartable a UNION ALL Select 'F' SEX, * from calendartable b) calendargender cg LEFT JOIN --我应该使用什么连接? (select * from maintable) main ON main.yearcount = cg.yearcount AND main.monthcount = cg.monthcount AND main.SEX = cg.SEX ```
标签: sql sql-server tsql join