子查询-条件-子选择-分组依据-计数

rdlzhqv9  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(159)

如果有两张table,我需要一个购物奖励的分组摘要。更多的项目意味着更多的奖励。
选项卡篮
| 标识符|姓名|购物_no|类型|
| - -|- -|- -|- -|
| 第001章|麦克|第00001号|A级|
| 002年|麦克|第00001号|A级|
| 003年|麦克|第00001号|A级|
| 004年|汤姆|第00002号|B|
| 005年|汤姆|第00002号|B|
| 006年|东尼|第00003号|A级|
| 007年|海因茨|第00004号|A级|
tab_奖励
| 项目|授与|类型_奖励|
| - -|- -|- -|
| 一个|0.05分|A级|
| 2个|0.50分|A级|
| 三个|0.90分|A级|
| 四个|一点整|A级|
| 一个|零点一五分|B|
| 2个|0.70分|B|
| 三个|1.10分|B|
| 四个|一点三十分|B|
我需要下表作为结果。
| 授与|项目|购物_no|类型_奖励|
| - -|- -|- -|- -|
| 0.90 |三个|第00001号|A级|
| 0.70 |2个|第00002号|B|
| 0.05 |一个|第00003号|A级|
| 0.05 |一个|第00004号|A级|
我的解决方案尝试。我每次只得到null作为结果的奖励(否则结果)或错误“sql 0811结果选择多行”。我很高兴任何帮助,谢谢!

SELECT          award,
                items,
                shopping_no,
                type_award
FROM            tab_basket t
LEFT OUTER JOIN tab_award u ON t.TYPE = u.type_award
                           AND CASE WHEN (SELECT COUNT(shopping_no)
                                            FROM tab_basket m
                                           WHERE t.id = m.id
                                             AND t.name = m.name
                                             AND t.shopping_no = m.shopping_no
                                             AND t.TYPE = u.TYPE
                                           GROUP BY shopping_no ) = '1' THEN '1'
                               case WHEN (SELECT COUNT(shopping_no)
                                            FROM tab_basket m
                                           WHERE t.id = m.id
                                             AND t.name = m.name
                                             AND t.shopping_no = m.shopping_no
                                             AND t.TYPE = u.TYPE
                                           GROUP BY shopping_no ) = '2' THEN '2' 
                               CASE WHEN (SELECT COUNT(shopping_no)
                                            FROM tab_basket m
                                           WHERE t.id = m.id
                                             AND t.name = m.name
                                             AND t.shopping_no = m.shopping_no
                                             AND t.TYPE = u.TYPE                                                                                                                  
                                           GROUP BY shopping_no ) = '3' THEN '3'
                               CASE WHEN (SELECT COUNT(shopping_no)
                                            FROM tab_basket m
                                           WHERE t.id = m.id
                                             AND t.name = m.name                                                                                                                   
                                             AND t.shopping_no = m.shopping_no                                                                                                                                 
                                             AND t.TYPE = u.TYPE                                                                                                                    
                                           GROUP BY shopping_no ) = '4' THEN '4'
                               ELSE 'no_price'                                                                                                   
                                END = u.award
mutmk8jj

mutmk8jj1#

您可以先聚合tab_basket表,然后将其与tab_award表连接-

SELECT TB.award, TB.items, TA.shopping_no, TB.type_award
  FROM (SELECT name, shopping_no, type, COUNT(*) CNT
          FROM tab_basket
         GROUP BY name, shopping_no, type) TB
  JOIN tab_award TA ON TB.type = TA.type_award
                    AND TB.CNT = TA.items

相关问题