【问题标题】:How to accomplish the following using SQL commands?如何使用 SQL 命令完成以下操作?
【发布时间】:2016-09-16 09:35:42
【问题描述】:

这是我的示例表:

为了争论起见,请注意任何一家餐厅(即使在将来)出售的商品都不会超过 3 件。

【问题讨论】:

  • 到目前为止你尝试过什么?从这个屏幕截图中(对我来说)不清楚你到底想做什么?
  • 你试过什么?查看how to ask 并创建一个Minimal, Complete, and Verifiable example
  • N/A 是 NULL,还是一个值?
  • tsqlteradata? CASE 超过 ROW_NUMBER

标签: sql tsql teradata


【解决方案1】:

如果售出的商品不超过 3 件,则固定查询可能是:

SELECT 
  tr.name restaurant
  , tr.is_open open
  , max(case when rn=1 then item_sold end) item_sold_1
  , max(case when rn=2 then item_sold end) item_sold_2
  , max(case when rn=3 then item_sold end) item_sold_3
FROM restaurants tr LEFT JOIN 
( select restaurant_id, item_sold
    ,row_number() over (partition by restaurant_id order by 1) rn from items_sold
) ti
ON (tr.restaurant_id=ti.restaurant_id)
GROUP by tr.name, tr.is_open, 3;

表结构:

create table restaurants
(
restaurant_id integer primary key not null,
name varchar(255),
is_open varchar(3)
);

create table items_sold
(
item_entry_id integer primary key not null, 
item_sold varchar(255),
restaurant_id integer references restaurants
);

如果需要超过 3 个项目,则必须根据 items_sold 对象中的唯一值计数动态生成 SQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    相关资源
    最近更新 更多