组织来自 Microsoft sql server 2008 的查询结果

Organizing query results from Microsoft sql server 2008

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

所以我现在有这部分查询

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

这是我的 table

 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

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

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

我听说在某个地方可以使用数据透视运算符,但我不确定这对我的情况有何影响。提前致谢

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

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