0

2つのテーブルがあります

表1
ショップの詳細があるショップ

ShopNo, ShopName

表2
すべての顧客の詳細がある顧客

CustomerId, CustomerName, MembershipType, ShopId 

クエリしようとしているのは

ShopName   SilverMember GoldMember LifeMember

ABC        45           110        1

XYZ        90           0          10

DEF        10           10         7

それを可能にする方法はありますか

Linqがうまくいっていれば、それ以外の場合はSQLクエリのみが事前に感謝します

よろしくモクシャ

4

3 に答える 3

2

このような何かがうまくいくはずです:

select s.ShopName,
       count(c1.CustomerId) as 'SilverMember',
       count(c2.CustomerId) as 'GoldMember',
       count(c3.CustomerId) as 'LifeMember'
from Shop s
left outer join Customer c1 on c1.ShopId = s.ShopNo and c1.MembershipType = 'SilverMember'
left outer join Customer c2 on c2.ShopId = s.ShopNo and c2.MembershipType = 'GoldMember'
left outer join Customer c3 on c3.ShopId = s.ShopNo and c3.MembershipType = 'LifeMember'
group by s.ShopName
于 2012-05-07T12:32:37.657 に答える
1

MembershipType実際の VARCHAR 値SilverMemberGoldMember、およびが含まれていると仮定するとLifeMember、これは T-SQL で機能するはずです。

SELECT
    [ShopName], COUNT([SilverMember]) AS [SilverMember], COUNT([GoldMember]) AS [GoldMember], COUNT([LifeMember]) AS [LifeMember]
FROM
    [Table1]
    INNER JOIN [Table2]
        ON [Table1].[ShopNo] = [Table2].[ShopId]
    PIVOT
    (
        MAX([MembershipType])
            FOR [MembershipType] IN ([SilverMember], [GoldMember], [LifeMember])
    ) AS [P]
GROUP BY
    [ShopName]

SQL Fiddle の例

于 2012-05-07T13:50:38.900 に答える
0

linq を使用する場合:

var query = from s in context.Shops
            join c in context.Customers on s.ShopNo equals c.ShopId
            group c by s.ShopName into g
            select new 
            {
              ShopName = g.Key,
              SilverMember = g.Count(c => c.MembershipType == "SilverMember"),
              GoldMember= g.Count(c => c.MembershipType == "GoldMember"),
              LifeMember= g.Count(c => c.MembershipType == "LifeMember"),
            };
于 2012-05-07T13:47:22.030 に答える