从Microsoft sql server 2008组织查询结果

时间:2015-04-03 23:37:45

标签: sql sql-server pivot

我想在不重复的情况下组织我从以下查询获得的结果。我会在一秒钟内告诉你我的意思。

所以我现在有了这部分查询

select ownername,
       hotel,
CASE 
    WHEN owner = salescashier and drinksales ='pepsi' then 'y'
    else 'n'
END as pepsi,
CASE 
    WHEN owner = salescashier and drinksales ='mountaindew' then 'y'
    else 'n'
END as mountainDew
FROM HotelDrinksOrders

GROUP BY ownername,hotel,totaldrinks,salescashier

这是我的表

 ownername   hotel    drinksales       salescashier
 ---------   -----    ----------       ------------
 Carlos      hotel1     pepsi           Michael
 Carlos      hotel1    pepsi            Michael
 Carlos      hotel1    pepsi            Michael
 Carlos      hotel1   mountaindew       Michael
 Carlos      hotel1   mountaindew       Michael
 Carlos      hotel2     pepsi           Michael
 Carlos      hotel2   mountaindew       Carlos
 Carlos      hotel2   mountaindew       Michael
 Maria       hotel3   mountaindew       Maria
 Maria       hotel3     pepsi            Maria
 Maria       hotel3     pepsi            Maria

以下是我从查询中得到的信息,我得到的是我不需要的重复数据(酒店)

    ownername       hotel      pepsi     mountaindew
    -----           ------      -----     -----------
    Carlos           hotel1      N             N
    Carlos           hotel1      N             N
    Carlos           hotel2      N             Y
    Carlos           hotel2      N             N
    Maria            hotel3      N             Y
    Maria           hotel3      Y             N

这是我想要的数据, 我想按名称和酒店对它们进行分组,如果所有者名称与salescashier相匹配,则只有'Y'

    ownername       hotel      pepsi     mountaindew
    -----          ------      -----     -----------
    Carlos         hotel1      N             N
    Carlos         hotel2      N             Y
    Maria          hotel3      Y             Y

我听说过某个地方我可以使用枢轴算子,但我不确定这对我的情况有什么用处。提前致谢

2 个答案:

答案 0 :(得分:1)

group by中删除不需要的项目并使用聚合。 Y的排序时间晚于N,因此max将正常运行。

select ownername,
       hotel,
MAX(CASE 
    WHEN ownername = salescashier and drinksales ='pepsi' then 'y'
    else 'n'
END) as pepsi,
MAX(CASE 
    WHEN ownername = salescashier and drinksales ='mountaindew' then 'y'
    else 'n'
END) as mountainDew
FROM HotelDrinksOrders
GROUP BY ownername,hotel

答案 1 :(得分:0)

DISTINCT关键字添加到SELECT语句中。