首页 > 解决方案 > 选择不同的寿

问题描述

我被这个问题困扰了好几天,仍然想不出解决方案。也许我只是让它太复杂了。所以我的查询看起来像这样。

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。 如您所见,仍有匹配的日期

编辑。我不知道我是否正确理解了批评,但我应用了这些更改。

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' FROM Table1 JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID JOIN Price ON Tickets.Price_ID = Price.Price_ID GROUP BY Date ;

而且我也明白我需要为解决方案提供更多信息。所有..Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),'€' ) AS 'Total' .. 是必要的,因为在数据库中有 Null 值,这就是为什么我使用 ISNULL 函数和 0 以防它为 NULL,否则它会中断所有计算。您可以在此处查看该表:我编辑了列名,以便您看到(表本身使用不同的语言) (不需要没有名称的列)

标签: mysqlsqlselectcastingdistinct

解决方案


使用显式连接而不是逗号分隔的旧连接方法,并使用子查询来获取 total 的格式。无需区分

    select 'Date', concat(total,' €') from
   (
    SELECT  Cast(Table1.Date as Date) AS 'Date',  
    SUM(Price.Morning+Price.Day+Price.Evening) as total
    FROM Price join
    Tickets on Tickets.Price_ID = Price.Price_ID
    join Table1 on  Tickets.Table1_ID = Table1.Table1_ID    
    GROUP BY Date
    ) as t

推荐阅读