尝试根据donatedmoney状态对多行进行分组

时间:2014-12-10 15:33:35

标签: sql sql-server

我真的很挣扎。我似乎无法弄明白。我已经掌握了这个概念,但并不完全知道如何将我的简单语言理解为如何将问题解决为正确的语法。

这是一个问题。

  

列出所有捐赠者及其地址的清单,分类是捐赠艺术品,金钱还是两者兼而有之。

这是表格的设置。

  

CareTakers:CareTakerID,CareTakerName

     

捐款:DonationID,DonorID,DonatedMoney,ArtName,ArtType,ArtAppraisedPrice,ArtLocationBuilding,ArtLocationRoom,CareTakerID

     

捐助者:DonorID,DonorName,DonorAddress

到目前为止,这是我的代码。

    SELECT 
    DISTINCT(DonorName), DonorAddress
    FROM 
    Donors JOIN Donations ON Donors.DonorID = Donations.DonorID
    GROUP BY 
    DonatedMoney
    HAVING 
    DonatedMoney = 'Y' OR DonatedMoney = 'N' OR DonatedMoney = 'Y' AND ArtName IS NOT NULL

任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

为什么要使用having条款?该问题指定不过滤。以下总结了捐款以获得您所需的信息,然后将结果加入donors表:

select d.*, don.DonationType
from donors d join
     (select don.donorid,
             (case when sum(case when donatedmoney = 'Y' then 1 else 0 end) > 0 and
                        sum(case when artname is not null then 1 else 0 end) > 0
                   then 'Both'
                   when sum(case when donatedmoney = 'Y' then 1 else 0 end) > 0
                   then 'Money'
                   when sum(case when artname is not null then 1 else 0 end)
                   then 'Art'
                   else 'Neither'
              end) as DonationType
      from donations don
      group by don.donorid
     ) don
     on d.donorid = don.donorid