【问题标题】:How to compare values within one column and make it as conditional statement?如何比较一列中的值并将其作为条件语句?
【发布时间】:2021-10-23 18:38:42
【问题描述】:

所以我有这张桌子:

DATE NAME REFERENCE ITEM_NUMBER TOTAL
03/06/2021 XYC SAFGASZXFEW Z1-100-0006 102
03/06/2021 XYC SAFGASZXFEW Z1-100-0002 200
03/06/2021 XYC SAFGASZXFEW A2-50-0003 329
03/06/2021 XYC SAFGASZXFEW A2-50-0007 431
03/07/2021 ZBA DSHDRFBVDRF RV-100-0001 653
03/07/2021 ZBA DSHDRFBVDRF RV-100-0004 222
03/07/2021 ZBA DSHDRFBVDRF A2-50-0002 643

我尝试用这个查询转置 item_number 表:


SUM(CASE WHEN ITEM_NUMBER like '%-100-%' THEN CAST(TOTAL AS INT)END) 100_1ST,

SUM(CASE WHEN ITEM_NUMBER like '%-100-%' AND (**ITEM_NUMBER<>ITEM_NUMBER**) THEN CAST(TOTAL AS INT)END) 100_2ND,

SUM(CASE WHEN ITEM_NUMBER like '%-50-%' THEN CAST(TOTAL AS INT)END) 50_1ST,

SUM(CASE WHEN ITEM_NUMBER like '%-50-%' AND (**ITEM_NUMBER<>ITEM_NUMBER**) THEN CAST(TOTAL AS INT)END) 50_2ND,

我得到了结果:

DATE NAME REFERENCE 100_1ST 100_2ND 50_1ST 50_2ND
03/06/2021 XYC SAFGASZXFEW 202 NULL 760 NULL
03/07/2021 ZBA DSHDRFBVDRF 875 NULL 643 NULL

而我预期的结果是这样的:

DATE NAME REFERENCE 100_1ST 100_2ND 50_1ST 50_2ND
03/06/2021 XYC SAFGASZXFEW 100 200 329 431
03/07/2021 ZBA DSHDRFBVDRF 653 222 643 NULL

我知道我对 100_2ND 和 50_2ND 的条件语句的查询是错误的,我仍然不知道如何比较一列中的两个值,例如(Z1-100-0006 & Z1-100-0002) 它们具有相同的 '%-100-%' 属性,但仅通过它们的最后一位数字来区分,因此我可以将 TOTAL 值放入不同的列中。谁能帮帮我?

【问题讨论】:

    标签: mysql sql conditional-statements transpose


    【解决方案1】:

    我想你想要row_number()。目前尚不清楚您是如何确定第一项和第二项的,但如下所示:

    SELECT date,
           SUM(CASE WHEN ITEM_NUMBER LIKE '%-100-%' AND seqnum = 1 THEN TOTAL END) as 100_1ST,
           SUM(CASE WHEN ITEM_NUMBER LIKE '%-100-%' AND seqnum = 2 THEN TOTAL END) as 100_2ND,
           SUM(CASE WHEN ITEM_NUMBER LIKE '%-50-%' AND seqnum = 1 THEN TOTAL END) as 50_1ST,
           SUM(CASE WHEN ITEM_NUMBER LIKE '%-50-%' AND seqnum = 2 THEN TOTAL END) as 50_2ND
    FROM (SELECT t.*,
                 ROW_NUMBER() OVER (PARTITION BY SUBSTRING_INDEX(SUBSTRING_INDEX(item_number, '-', 2), '-', -1)
                                    ORDER BY item_number
                                   ) as seqnum
          FROM t
         ) t
    GROUP BY date;
    

    【讨论】:

    • 我试过你的查询,但有一个错误 'SUBSTRING_INDEX' is not a known built in function name,谢谢
    • @revadwi 。 . .你的问题被标记为 MySQL,这肯定是一个 MySQL 函数:dev.mysql.com/doc/refman/8.0/en/…
    • 是的,但我不知道为什么会出错,谢谢你的上一个回答,我现在可以使用我以前从未想过的 DENSE_RANK() 对项目进行分类。
    猜你喜欢
    • 2011-11-27
    • 2022-01-17
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多