首页 > 解决方案 > 将一些类别作为列名

问题描述

我有一张看起来像这样的桌子:

地区 类别 尺寸 品牌 价格
一月 加拿大 T 恤 小号 耐克 100
一月 加拿大 T 恤 小号 锐步 150
一月 加拿大 T 恤 小号 彪马 200
一月 加拿大 夹克 小号 耐克 200
一月 加拿大 夹克 小号 锐步 300
一月 美国 夹克 大号 彪马 400
一月 美国 夹克 大号 锐步 500
  1. 我想让表格看起来像这样(不需要聚合函数):
地区 类别 尺寸 耐克 锐步 彪马
一月 加拿大 T 恤 小号 100 150 200
一月 加拿大 夹克 小号 400 300 空值
一月 美国 夹克 大号 空值 500 400
  1. 我想选择具有相同月份、地区、类别和尺寸值的行耐克价格高于其他任何行。对于上表结果应该是:
地区 类别 尺寸 耐克 锐步 彪马
一月 加拿大 夹克 小号 400 300 空值

标签: sqlsql-serversql-server-2008

解决方案


您似乎想要条件聚合,然后进行一些过滤。

select *
from (select Month, Region, Category, Size,  
             max(case when brand = 'Nike' then price end) as nike, 
             max(case when brand = 'Reebok' then price end) as Reebok, 
             max(case when brand = 'Puma' then price end) as Puma           
      from t
      group by Month, Region, Category, Size
     ) t
where nike > coalesce(Reebok, 0) and
      nike > coalesce(Puma, 0);

推荐阅读