【发布时间】:2019-04-10 20:05:27
【问题描述】:
我被这个问题困扰了好几天,仍然想不出解决方案。也许我只是让它太复杂了。 所以我的查询看起来像这样。
SELECT distinct Cast(Table1.Date as Date) AS 'Date', Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),' €') AS 'Total'
FROM Price,Tickets,Table1
WHERE Tickets.Price_ID = Price.Price_ID AND
Tickets.Table1_ID = Table1.Table1_ID
GROUP BY Date
;
查询应显示不同的日期,并应显示在特定日期赚取的总 SUM。 As you can see there still are matching dates
编辑。我不知道我是否正确理解了批评,但我应用了这些更改。
SELECT distinct Cast(Tabl1.Date as Date) AS 'Date', Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0) ))*Tickets.Count),2),'€') AS 'Total' 从表 1 在门票上加入门票。Table1_ID = Table1.Table1_ID 加入价格门票.Price_ID = Price.Price_ID 按日期分组 ;
而且我也明白我需要为解决方案提供更多信息。 所有 ..Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),'€' ) AS 'Total' .. 是必要的,因为在数据库中有 Null 值,这就是为什么我使用 ISNULL 函数和 0 以防它为 NULL,否则它会中断所有计算。您可以在此处查看该表:I edited the column names so you could see(table itself is in different language) (这里不需要没有名称的列)
【问题讨论】:
-
我猜 Table1.Date 不是日期字段(否则为什么要转换它),您的 group by 也应该与您的选择保持一致,并且您不需要与 group by 区分。请获取出于使用隐式连接的习惯。
-
如果不查看您的数据,就很难看到发生了什么(即使只是一个简短的示例)。但是,我会使用 CTE 对其进行分解首先将您的行总结为 CTE,然后使用该数据集进行 GROUP BY,最后担心格式(添加 EURO 符号)。
-
@P.Salmon Table1.Date 类型是 Smalldatetime 数据类型,但我必须在 YY/MM 之后将其格式化/转换为日期,最后只显示 YY。
标签: mysql sql select casting distinct