【问题标题】:sql - create single query to get the values for the given criteriasql - 创建单个查询以获取给定条件的值
【发布时间】:2012-12-31 17:43:52
【问题描述】:

我正在尝试创建一个将生成下表的查询。 我知道列名(即每列的开始和结束日期。这些日期将根据月/年而有所不同。而且列数也会有所不同,因为某个月可能有 6 周)。

池的数量也可能不同。可以有“n”个池。所以我为每个池(行)和每周(列)创建了一个查询。
假设有 3 个池(3 行)和 5 周(5 列),我可能需要运行 3*5=15 个查询。
有没有办法创建一个查询来解决这个问题?
谁能帮我解决这个问题?
我还在做这个..

--------------------------------------------------
row 0 | week1 | week2 | week3  | week4  | week5  |
st-end|jan1 -2|jan 3-9|jan10-17|jan18-24|jan25-31|
--------------------------------------------------
pool a| 100   | 105   | 309    | 345    | 234    |
pool b| 106   | 108   | 399    | 245    | 214    |
pool c| 120   | 145   | 359    | 365    | 274    |
--------------------------------------------------  

【问题讨论】:

  • 这不是你问题的答案,只是一个评论......这通常是我更喜欢从 SQL 切换到命令式编程 (Java) 的那种情况。您可以创建一个用于计算通用“单元格”的准备好的语句,然后为 15 个单元格中的每一个执行它(通过改变一些参数)。没什么不好的,15分钟就搞定了。如果计算和/或查询很昂贵,您可以缓存结果表。在 SQL 中执行所有这些操作可能会变得棘手且难以被其他人阅读/理解。
  • 没有看到您要查询的表以创建表(结果集),您已经表明不可能说出查询应该是什么。
  • @NickHolt - 假设我试图获得 ('pool a'- week1)、(pool a - week 2) 等的组合,这适用于所有池,因此需要 15 个查询我认为应该运行。我只想检查是否可以运行单个查询..
  • 这称为具有动态列的 pivot 查询。目前这在 MySQL 中是不可能的。请参阅this ink 了解一些有趣的解决方法。
  • 如果你有几十个这样的汇总表,可以考虑创建一个支持多维查询的数据仓库。

标签: java mysql sql


【解决方案1】:

您是否尝试过使用 CASE 表达式来做到这一点? [参见“控制流函数”] 大致如下:

select POOL
      ,sum(case when dt between 20120101 and 20120107 then VAL else 0) as Wk1
      ,sum(case when dt between 20120108 and 20120114 then VAL else 0) as Wk2
    ...  ...
from MY_TABLE
group by POOL

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2011-11-05
    相关资源
    最近更新 更多