首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wTrying在Oracle中编写CASE语句。不确定如何添加此限制

wTrying在Oracle中编写CASE语句。不确定如何添加此限制
EN

Stack Overflow用户
提问于 2022-04-01 10:33:32
回答 2查看 29关注 0票数 1

所以这张桌子-

代码语言:javascript
复制
create table inventoryItem (
       itemNum    varchar(10) not null
              references itemType(itemNum) on delete cascade,
       code   varchar(20) not null,
       qtyInstock float       not null,
       itemColor  varchar(15),
       itemSize   float,
       primary key (itemNum, code)
);

这些都是

代码语言:javascript
复制
insert into inventoryItem values ('A0', 'pbk', 30, 'black', 3.0);
insert into inventoryItem values ('B1', 'hbk', 50, 'white', 4.0);
insert into inventoryItem values ('A0', 'hbk', 25, 'green', 4.0);
insert into inventoryItem values ('C2', 'hbk', 20, 'black', 3.0);
insert into inventoryItem values ('C1', 'ebk', 70, 'black', 4.0);
insert into inventoryItem values ('A3', 'pbk', 30, 'black', 2.0);
insert into inventoryItem values ('A2', 'pbk', 50, 'green', 3.0);
insert into inventoryItem values ('A0', 'ebk', 15, 'green', 4.0);
insert into inventoryItem values ('C2', 'pbk', 30, 'black', 3.0);

我试图编写一个子查询,首先选择itemNum、itemColor、itemSize以及每一次发生的股票数量。之后,CASE语句需要返回一个结果。让我们说“快乐”,如果项目编号没有出现超过一次,以相同的颜色和大小。否则“悲伤”。我遇到的问题是如何在Oracle中说明这一点。这是完成的第一部分-

代码语言:javascript
复制
SELECT LISTAGG(itemnum, ', ') WITHIN GROUP (ORDER BY itemnum) itemNum,
itemsize, itemcolor, SUM(qtyinstock) qty_of_combination
FROM inventoryitem
GROUP BY itemsize, itemcolor;

这是我对案件陈述的糟糕尝试-

代码语言:javascript
复制
SELECT LISTAGG(itemNum, ', ') WITHIN GROUP (ORDER BY itemNum) itemNum,
itemSize, itemColor, SUM(qtyinstock) qty_of_combination, (
    SELECT itemNum, itemColor, itemSize, 
        CASE WHEN COUNT(itemNum) <= 1 THEN 'BR-2 Satisifed'
        ELSE 'BR-2 Violated'
        END AS itemNumRules
    FROM inventoryItem
    )
FROM inventoryItem
GROUP BY itemSize, itemColor;

这个查询完成了第一部分,但我不知道我到底需要在这个示例语句中写些什么。任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2022-04-01 10:52:07

请检查一下:

代码语言:javascript
复制
SELECT
    COUNT(T1.itemNum),
    LISTAGG(T1.itemNum, ', ') WITHIN GROUP (
    ORDER BY T1.itemNum) itemNum,
    T1.itemSize,
    T1.itemColor,
    SUM(T1.qtyinstock) qty_of_combination,
    T2.itemNumRules
FROM
    inventoryItem T1
INNER JOIN (
    SELECT
        itemNum,
        CASE
            WHEN COUNT(itemNum) < 2 THEN 'BR-2 Satisifed'
            ELSE 'BR-2 Violated'
        END AS itemNumRules
    FROM
        inventoryItem
    GROUP BY
        itemNum) T2 ON
    T1.itemNum = T2.itemNum
GROUP BY
    T1.itemSize,
    T1.itemColor,
    T2.itemNumRules;

希望它能帮上忙

票数 0
EN

Stack Overflow用户

发布于 2022-04-01 11:01:34

由于你没有公布你的预期结果,一个简单的计数分析功能是我理解你需要的。-

代码语言:javascript
复制
SELECT LISTAGG(itemnum, ', ') WITHIN GROUP (ORDER BY itemnum) itemNum,
       itemsize, 
       itemcolor, 
       SUM(qtyinstock) qty_of_combination, 
       CASE WHEN cnt <= 1 THEN 'BR-2 Satisifed' ELSE 'BR-2 Violated' END itemNumRules
  FROM (SELECT itemnum, itemsize, itemcolor, qtyinstock, 
               COUNT(*) OVER(partition by itemsize, itemcolor) cnt
          FROM inventoryitem)
 GROUP BY itemsize, 
          itemcolor, 
          cnt;

演示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71705533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档