मुझे एक एमएस एसक्यूएल 2012 क्वेरी बनाने में कुछ मदद की ज़रूरत है जो वांछित सीढ़ी-चरण आउटपुट से मेल खाएगा। पंक्तियों एक तिथि सीमा (खाता सबमिट करने का दिनांक माह) से डेटा का सारांश, और स्तंभों अन्य दिनांक सीमा से यह संक्षेप में प्रस्तुत (भुगतान तिथि महीने)एसक्यूएल सीढ़ी प्रश्न सहायता
तालिका 1: लेखा पटरियों संग्रह के लिए रखा खातों।
CREATE TABLE [dbo].[Accounts](
[AccountID] [nchar](10) NOT NULL,
[SubmissionDate] [date] NOT NULL,
[Amount] [money] NOT NULL,
CONSTRAINT [PK_Accounts] PRIMARY KEY CLUSTERED (AccountID ASC))
INSERT INTO [dbo].[Accounts] VALUES ('1000', '2012-01-01', 1999.00)
INSERT INTO [dbo].[Accounts] VALUES ('1001', '2012-01-02', 100.00)
INSERT INTO [dbo].[Accounts] VALUES ('1002', '2012-02-05', 350.00)
INSERT INTO [dbo].[Accounts] VALUES ('1003', '2012-03-01', 625.00)
INSERT INTO [dbo].[Accounts] VALUES ('1004', '2012-03-10', 50.00)
INSERT INTO [dbo].[Accounts] VALUES ('1005', '2012-03-10', 10.00)
तालिका 2: ट्रांस पटरियों भुगतान
CREATE TABLE [dbo].[Trans](
[TranID] [int] IDENTITY(1,1) NOT NULL,
[AccountID] [nchar](10) NOT NULL,
[TranDate] [date] NOT NULL,
[TranAmount] [money] NOT NULL,
CONSTRAINT [PK_Trans] PRIMARY KEY CLUSTERED (TranID ASC))
INSERT INTO [dbo].[Trans] VALUES (1000, '2012-01-15', 300.00)
INSERT INTO [dbo].[Trans] VALUES (1000, '2012-02-15', 300.00)
INSERT INTO [dbo].[Trans] VALUES (1000, '2012-03-15', 300.00)
INSERT INTO [dbo].[Trans] VALUES (1002, '2012-02-20', 325.00)
INSERT INTO [dbo].[Trans] VALUES (1002, '2012-04-20', 25.00)
INSERT INTO [dbo].[Trans] VALUES (1003, '2012-03-24', 625.00)
INSERT INTO [dbo].[Trans] VALUES (1004, '2012-03-28', 31.00)
INSERT INTO [dbo].[Trans] VALUES (1004, '2012-04-12', 5.00)
INSERT INTO [dbo].[Trans] VALUES (1005, '2012-04-08', 7.00)
INSERT INTO [dbo].[Trans] VALUES (1005, '2012-04-28', 3.00)
बनाया यहाँ वांछित आउटपुट की तरह
*Total Payments in Each Month*
SubmissionYearMonth TotalAmount | 2012-01 2012-02 2012-03 2012-04
--------------------------------------------------------------------
2012-01 2099.00 | 300.00 300.00 300.00 0.00
2012-02 350.00 | 325.00 0.00 25.00
2012-03 685.00 | 656.00 15.00
पहले दो स्तंभों महीने से समूहीकरण Account.Amount योग दिखना चाहिए।
अंतिम 4 कॉलम वर्तमान पंक्ति के दिए गए महीने में रखे गए खातों के लिए Tran.TranAmount, महीने के अनुसार।
मैं जिस प्रश्न के साथ काम कर रहा हूं, वह करीब महसूस कर रहा है। मैं सिर्फ अंतराल सही नहीं है।
Select SubmissionYearMonth,
TotalAmount,
pt.[0] AS MonthOld0,
pt.[1] AS MonthOld1,
pt.[2] AS MonthOld2,
pt.[3] AS MonthOld3,
pt.[4] AS MonthOld4,
pt.[5] AS MonthOld5,
pt.[6] AS MonthOld6,
pt.[7] AS MonthOld7,
pt.[8] AS MonthOld8,
pt.[9] AS MonthOld9,
pt.[10] AS MonthOld10,
pt.[11] AS MonthOld11,
pt.[12] AS MonthOld12,
pt.[13] AS MonthOld13
From (
SELECT Convert(Char(4),Year(SubmissionDate)) + '-' + Right('00' + Convert(VarChar(2), DatePart(Month, SubmissionDate)),2) AS SubmissionYearMonth,
SUM(Amount) AS TotalAmount
FROM Accounts
GROUP BY Convert(Char(4),Year(SubmissionDate)) + '-' + Right('00' + Convert(VarChar(2), DatePart(Month, SubmissionDate)),2)
)
AS AccountSummary
OUTER APPLY
(
SELECT *
FROM (
SELECT CASE WHEN DATEDIFF(Month, SubmissionDate, TranDate) < 13
THEN DATEDIFF(Month, SubmissionDate, TranDate)
ELSE 13
END AS PaymentMonthAge,
TranAmount
FROM Trans INNER JOIN Accounts ON Trans.AccountID = Accounts.AccountID
Where Convert(Char(4),Year(TranDate)) + '-' + Right('00' + Convert(VarChar(2), DatePart(Month, TranDate)),2)
= AccountSummary.SubmissionYearMonth
) as TransTemp
PIVOT (SUM(TranAmount)
FOR PaymentMonthAge IN ([0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9],
[10],
[11],
[12],
[13])) as TransPivot
) as pt
यह निम्न उत्पादन उत्पादन है:
SubmissionYearMonth TotalAmount MonthOld0 MonthOld1 MonthOld2 MonthOld3 ...
2012-01 2099.00 300.00 NULL NULL NULL ...
2012-02 350.00 325.00 300.00 NULL NULL ...
2012-03 685.00 656.00 NULL 300.00 NULL ...
स्तंभ तारीख हेडर के लिए के रूप में क्वेरी मैं अब तक के साथ काम कर रहा हूँ है। मुझे यकीन नहीं है कि सबसे अच्छा विकल्प यहाँ क्या है। मैं कॉलम का एक अतिरिक्त सेट जोड़ सकता हूं और एक गणना मूल्य बना सकता हूं जिसे मैं परिणामी रिपोर्ट में उपयोग कर सकता हूं।
एसक्यूएल फिडल: http://www.sqlfiddle.com/#!6/272e5/1/0
किसी भी सहायता के लिए धन्यवाद।
** उत्कृष्ट ** नौकरी नमूना डेटा और प्रश्नों सहित। इस तरह हर सवाल लिखा जाना चाहिए! – mellamokb
@mellamokb: प्लस [SQLFiddle] (http://sqlfiddle.com) के लिए एक लिंक और यह सही होगा :) –
@juergend: दरअसल। ओपी की क्वेरी यहां दी गई है: http://www.sqlfiddle.com/#!3/56223/1 – mellamokb