एसक्यूएल यूनियन को सभी को linq-sql, linq-to-sql, group-by, union में कैसे ठीक करें और परिवर्तित करें

मेरे पास दो टेबल हैं:

create table A
(
Id              uniqueidentifier primary key not null,
Success         int,
Failed          int,
CreatedOn       datetime default getdate() not null
)
go

create table B
(
Id              uniqueidentifier primary key not null,
Email           varchar(150),
Mark            float,
CreatedOn       datetime default getdate() not null
)
go


insert into A values(NEWID(), 3, 9, "2011-11-10 07:56:14.933")
insert into A values(NEWID(), 8, 3, "2011-11-30 10:56:14.933")
insert into A values(NEWID(), 2, 13, "2011-08-11 17:56:14.933")
insert into A values(NEWID(), 22, 4, "2010-12-15 21:56:14.933")

insert into B values(NEWID(),"Email 1", 9, "2011-10-10 07:56:14.933")
insert into B values(NEWID(),"Email 2", 9, "2010-10-10 07:56:14.933")
insert into B values(NEWID(),"Email 3", 9, "2009-10-10 07:56:14.933")
insert into B values(NEWID(),"Email 4", 9, "2008-10-10 07:56:14.933")

एकल कथन:

SELECT SUM(Success) as TotalSuccess, SUM(Failed) as TotalFailed
FROM  A
--WHERE CreatedOn = (1)
GROUP BY MONTH(CreatedOn) -- (3)

SELECT COUNT(*) as TotalEmail
FROM B
--WHERE CreatedOn = (2)
GROUP BY MONTH(CreatedOn) -- (3)

यदि आप दो एकल कथन सफलतापूर्वक चलाते हैं। मेरे पास दो कथन शामिल करने के लिए यूनियन का उपयोग करके निम्नलिखित ट्रांजैक्ट एसक्यूएल क्वेरी है लेकिन त्रुटि।

SELECT  SUM(Success), SUM(Failed), TotalEmail, CreatedOn
FROM (SELECT  Success, Failed, 0 as TotalEmail, CreatedOn
FROM A
--WHERE CreatedOn = (1)
UNION ALL
SELECT  0 as Success, 0 as Failed, COUNT(*) as TotalEmail, CreatedOn
FROM B
--WHERE CreatedOn = (2)
) SomeThing
GROUP BY MONTH(CreatedOn) -- (3)

(1), (2): यदि उपयोगकर्ता सभी वर्षों का चयन करता है तो क्यों नहीं / वर्ष हो सकता है - महीने / सभी महीने - दिन / पूरे दिन

(3): यदि उपयोगकर्ता सभी वर्षों का चयन करता है तो ग्रुप बाय / यदि उपयोगकर्ता चयनित वर्ष -> महीने के अनुसार समूह, यदि उपयोगकर्ता महीने का चयन करता है -> दिन के अनुसार समूह

कैसे ठीक करें और यह LINQ में दिखाई देगा यानी कुछ उदाहरण अच्छे होंगे या अगर कोई यूनियन पर लिनक में एक अच्छा ट्यूटोरियल सुझा सकता है।

संपादित करें मैंने LINQ क्वेरी को फिर से लिखा है और मेरी त्रुटि तय की है:

var query = (_model.A.GroupBy(s1 => s1.CreatedOn.Month)
.Select(g => new
{
CountFailed = g.Sum(item => item.Failed),
CountSuccess = g.Sum(item => item.Success),
CountEmail = 0,
Month = g.Key
}))
.Concat(_model.B.GroupBy(s2 => s2.CreatedOn.Month)
.Select(myGroup => new
{
CountFailed = 0,
CountSuccess = 0,
CountEmail = myGroup.Count(),
Month = myGroup.Key,
}));
var result = query.GroupBy(q => q.Month).Where(myGroup => myGroup.Count() > 0)
.Select(myGroup => new
{
CountFailed = myGroup.Sum(item => item.CountFailed),
CountSuccess = myGroup.Sum(item => item.CountSuccess),
CountEmail = myGroup.Sum(item => item.CountEmail),
Month = myGroup.Key
});

उत्तर:

जवाब के लिए 0 № 1

आप उपयोग कर सकते हैं Concat method.look कैसे करें: दो अनुक्रमों को जोड़ना (LINQ से SQL)


संबंधित सवाल
सबसे लोकप्रिय