【问题标题】:Select distinct shou选择不同的寿
【发布时间】: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


【解决方案1】:

使用显式连接而不是逗号分隔的旧连接方法,并使用子查询来获取 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2023-04-05
    • 2020-10-04
    • 2011-09-28
    • 2011-11-07
    • 2011-04-11
    相关资源
    最近更新 更多