2017-07-15 14 views
1

私は、グループメンバーからの月割りのSQLテーブルを持っています。Sql月額未払いを検索するクエリ

Member A : 10 (Monthly Fee), 
Member B : 15 (Monthly Fee) 

私のデータベース表

My Database Table

私は次のように返すことができますクエリを探しています。 PICに見られるよう は私が支払い

あなたの例のデータに基づいて

​​

+0

あなたも今年考えるのですか? –

+0

たとえば、2017年1月に2016年12月の支払い記録を受け取ることはできますか? –

答えて

1

と私はいつも、むしろあなたのプレゼンテーションアプリケーションにPIVOTにあなたのデータをお勧めしますけれども、あなたがPIVOTを使用することができ所望の出力に欠けている見つけるために取得帰着する必要がデータベースクエリよりも列名の動的なリストについては

USE 
tempdb 
GO 

IF OBJECT_ID('Payments', 'U') IS NOT NULL 
    DROP TABLE Payments 
GO 

CREATE TABLE Payments(
    Serial# INT NOT NULL PRIMARY KEY 
    ,Date DATE NOT NULL 
    ,MemberName VARCHAR(20) NOT NULL 
    ,Month VARCHAR(20) NOT NULL 
    ,MonthlyFee INT NOT NULL 
); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (1,'01/01/2017','Member A','January',10); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (2,'01/01/2017','Member B','January',15); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (3,'01/02/2017','Member A','February',10); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (4,'01/03/2017','Member B','March',15); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (5,'01/03/2017','Member A','March',10); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (6,'01/05/2017','Member A','May',10); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (7,'01/06/2017','Member A','June',10); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (8,'01/05/2017','Member B','May',15); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (9,'01/09/2017','Member A','September',10); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (10,'01/06/2017','Member B','June',15); 
INSERT INTO Payments(Serial#,Date,MemberName,Month,MonthlyFee) VALUES (11,'01/10/2017','Member A','October',10); 

SELECT 
    MemberName 
, January 
, February 
, March 
, April 
, May 
, June 
, July 
, August 
, September 
, October 
, November 
, December 

FROM 
(
    SELECT 
     MemberName 
    , Month 
    , MonthlyFee 

    FROM 
     Payments 
) AS P 

PIVOT 
(
    SUM(MonthlyFee) 
    FOR [Month] IN 
    (
     January 
    , February 
    , March 
    , April 
    , May 
    , June 
    , July 
    , August 
    , September 
    , October 
    , November 
    , December 
    ) 
) AS Pvt 
0

、あまり異なるmheptinstallのアプローチから

Declare @cols1 varchar(max) 
Declare @query nvarchar(max) 

Select @cols1 = stuff((select top (12) ','+QuoteName(DateName(MONTH,(DateAdd(MM, Row_Number() over(order by (Select NULL))-1, '2017-01-01')))) 
    from master..spt_values for xml path('')),1,1,'') 

Select @query = ' Select * from (
    Select MemberName, [Month], MonthlyFee from Payments) a 
    pivot(sum(MonthlyFee) for [Month] in ('+ @cols1 + ')) p ' 

Exec SP_ExecuteSql @query 
関連する問題