首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -搜索列具有特定值(varchar)的位置

问SQL -搜索列具有特定值(varchar)的位置
EN

Stack Overflow用户
提问于 2018-02-23 06:08:26
回答 1查看 42关注 0票数 0

我正在开发一个个人C#应用程序(有点像钱包),我有一个查询,它显示所有表中的所有费用(所有int列的总和)

代码语言:javascript
复制
SELECT l.Luna, l.An, 
        sa.Salariu, sa.Bonuri, sa.Bonus,
             x.Afara, x.Vacanta, x.Cumparaturi_Diverse, x.PC,
                    z.Cumparaturi_Piata, z.FastFood, z.Mancare_Munca,
                         xa.Benzina, xa.Masina_Altele, 
                            xz.Intretinere, xz.Internet_TV, xz.Telefon, xz.Datorii,
                                 dif.Cont                           

From dbo.Luna l
INNER JOIN (SELECT Luna, AN, SUM(s.Salariu) AS Salariu, SUM(s.Bonuri) AS 

Bonuri, SUM(s.Bonus) AS Bonus FROM dbo.Salariu s GROUP BY Luna, An) sa ON l.Luna = sa.Luna and l.An = sa.An
INNER JOIN (SELECT Luna, An, SUM(a.Afara) AS Afara, SUM(a.Vacanta) AS Vacanta, SUM(a.Cumparaturi_Diverse) AS Cumparaturi_Diverse, SUM(a.PC) AS PC FROM dbo.Altele a GROUP BY Luna, AN) x ON l.Luna = x.Luna and l.An = x.An
INNER JOIN (SELECT Luna, An, SUM(m.Cumparaturi_Piata) AS Cumparaturi_Piata, SUM(m.FastFood) AS FastFood, SUM(m.Munca) AS Mancare_Munca FROM dbo.Cumparaturi m GROUP BY Luna, AN) z ON l.Luna = z.Luna and l.An = z.An
INNER JOIN (SELECT Luna, An, SUM(ma.Benzina) AS Benzina, SUM(ma.Altele) AS Masina_Altele FROM dbo.Masina ma GROUP BY Luna, AN) XA ON l.Luna = xa.Luna and l.An = xa.An
INNER JOIN (SELECT Luna, An, SUM(u.Intretinere) AS Intretinere, SUM(u.Internet_TV) AS Internet_TV, SUM(u.Telefon) AS Telefon, SUM(u.Altele) AS Datorii, SUM(u.Chirie) AS Chirie FROM dbo.Utilitati u group by Luna, AN) xz ON l.Luna = xz.Luna and l.An = xz.An
INNER JOIN dbo.Diferenta  dif ON l.Luna = dif.Luna and l.AN = dif.An
WHERE l.Luna in ('December', 'January', 'February') and l.An in (2017, 2018, 2019)

问题是,我还希望通过一个列进行搜索,该列仅在具有内部连接的表中可用(列名= App_User)。所以我的问题是,如何将App_User列(即varchar)添加到此查询中。where应该看起来像这样:

代码语言:javascript
复制
WHERE l.Luna in ('December', 'January', 'February') and l.An in (2017, 2018, 2019) and App_User = @App_User (a parameter that will take the value from c#)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-24 16:13:55

所以我找到了问题的解决方案,我必须向所有s.App_User = @App_User的内部连接添加where子句,并且我还添加了OR ISNULL(@App_User,'') = '',如果参数为空,则应显示所有数据,因此查询现在如下所示:

代码语言:javascript
复制
declare @App_User varchar(255) = 'test'
SELECT DISTINCT 
        s.Luna, s.An,  
            sa.Salariu, sa.Bonuri, sa.Bonus,
                 x.Afara, x.Vacanta, x.Cumparaturi_Diverse, x.PC,
                        z.Cumparaturi_Piata, z.FastFood, z.Mancare_Munca,
                             xa.Benzina, xa.Masina_Altele, 
                                xz.Intretinere, xz.Internet_TV, xz.Telefon,
                                    lu.LunaID


From dbo.Salariu s
INNER JOIN (SELECT Luna, AN, SUM(s.Salariu) AS Salariu, SUM(s.Bonuri) AS Bonuri, SUM(s.Bonus) AS Bonus FROM dbo.Salariu s WHERE s.App_User = @App_User OR ISNULL(@App_User, '') = '' GROUP BY Luna, An) sa ON s.Luna = sa.Luna and s.An = sa.An
INNER JOIN (SELECT Luna, An, SUM(a.Afara) AS Afara, SUM(a.Vacanta) AS Vacanta, SUM(a.Cumparaturi_Diverse) AS Cumparaturi_Diverse, SUM(a.PC) AS PC FROM dbo.Altele a  WHERE a.App_User = @App_User OR ISNULL(@App_User, '') = '' GROUP BY Luna, AN) x ON s.Luna = x.Luna and s.An = x.An
INNER JOIN (SELECT Luna, An, SUM(m.Cumparaturi_Piata) AS Cumparaturi_Piata, SUM(m.FastFood) AS FastFood, SUM(m.Munca) AS Mancare_Munca FROM dbo.Cumparaturi m WHERE m.App_User = @App_User OR ISNULL(@App_User, '') = '' GROUP BY Luna, AN) z ON s.Luna = z.Luna and s.An = z.An
INNER JOIN (SELECT Luna, An, SUM(ma.Benzina) AS Benzina, SUM(ma.Altele) AS Masina_Altele FROM dbo.Masina ma WHERE ma.App_User = @App_User OR ISNULL(@App_User, '') = '' GROUP BY Luna, AN) XA ON s.Luna = xa.Luna and s.An = xa.An
INNER JOIN (SELECT Luna, An, SUM(u.Intretinere) AS Intretinere, SUM(u.Internet_TV) AS Internet_TV, SUM(u.Telefon) AS Telefon, SUM(u.Altele) AS Altele, SUM(u.Chirie) AS Chirie FROM dbo.Utilitati u WHERE u.App_User = @App_User OR ISNULL(@App_User, '') = '' GROUP BY Luna, AN) xz ON s.Luna = xz.Luna and s.An = xz.An
--INNER JOIN dbo.Diferenta  dif ON s.Luna = dif.Luna and s.AN = dif.An
INNER JOIN dbo.Luna lu on s.Luna = lu.LUNA
WHERE s.Luna in ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'Octomber', 'December') and s.An in (2017, 2018, 2019)
ORDER BY s.An, lu.lunaID ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48938040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档