【问题标题】:Change results of SQL in the query itself?在查询本身中更改 SQL 的结果?
【发布时间】:2013-04-24 16:13:50
【问题描述】:

希望我能把脑子里的东西翻译成文字。我有一个 PHP 应用程序,我在其中查询我们的数据库(Pervasive SQL,而不是 MySQL,所以我没有所有可用的 MySQL 命令)并将结果吐出到 JSON 编码的字符串中以用于 Google 图表。

这是我的查询:

SELECT oestats.period, oestats.salesamtf 
FROM oestats 
GROUP BY oestats.yr, oestats.period, oestats.salesamtf

salesamtf 返回的内容对我来说没问题,但 period 每个月都会返回一个数值(例如,1 代表 1 月,2 代表 2 月,等等)。

我想在这里做两件事。我想在结果中返回一月而不是 1。我确定我可以在 javascript 中执行此操作,我只是假设必须有一种方法可以在查询本身或通过其他方式执行此操作?最大的原因是我想要#2:

我不仅想返回一月而不是 1,而且我还想在它前面加上查询中分组的年份(例如 2012/一月)。目前结果分组正确,我可以弄清楚哪个时期属于哪一年,但是在查看图表时需要一些挖掘。

关于如何实现这一点的任何想法?

【问题讨论】:

    标签: php sql group-by rename


    【解决方案1】:

    这可能有效

    SELECT CASE oestats.period
    WHEN 1 THEN "January, "
    WHEN 2 THEN "February, "
    WHEN 3 THEN "March, "
    WHEN 4 THEN "April, "
    WHEN 7 THEN "May, "
    WHEN 6 THEN "June, "
    ...
    ELSE "December, "
    END || oestats.yr as theTimeFrame, oestats.salesamtf FROM 
    oestats GROUP BY theTimeFrame,    
    oestats.salesamtf
    

    不记得是否可以按 SQL92 中的构造字段进行分组,但这应该可以帮助您入门。

    【讨论】:

    • 不幸的是,这对我不起作用。我确实最终改变了你的想法,但我仍然无法让它正常运行。显然我很灵巧,因为我什至无法让 CASE 语句工作,我知道我的 Pervasive.SQL (10.3) 版本中存在这种语句。使用 CASE 时,我得到的只是 NULL 值。
    • 您能粘贴您修改后的确切查询,我会看一下吗?也从简单开始,只需做一个选择案例,看看会发生什么。最后你能显示表定义吗? (如果句点是一个有区别的字符)您可能还需要将年份转换为字符串
    • 实际上,我也尝试过作为字符串。这可能是一个没有实际意义的任务,因为我在返回结果后刚刚在我的 PHP 代码中执行了 CASE 语句。不过,我现在想做的是我问题的第二部分,即将年份与期间(月)绑定。例如2012/5 而不是只返回 5 个。这甚至可能吗?
    • 您必须转换为字符串,但是是的,您可以在输出上连接字段(这就是 || oestats.yr 所做的)如果您只是为case 语句按期分叉?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多