小编Rus*_*tte的帖子

如何SUM DISTINCT行?

我正在努力查询需要SUM DISTINCT Rows的查询.必须有办法做到这一点......但我迷路了.

这是我得到的:

SELECT DISTINCT Zipcodes.CountyID,
us_co_est2005_allData.PopEstimate2005, 
us_co_est2005_allData.EstimatesBase2000,
users_link_territory.userID
FROM
Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID = 
Users_link_territory.CountyID Inner Join
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code
= us_co_est2005_alldata.County
WHERE (users_link_territory.userid = 4)
Run Code Online (Sandbox Code Playgroud)

这给了我34行,它们为属于userid4的每个县提供了不同的人口数,但是我如何获得PopEstimate2005和EstimatesBase2000的SUM?

像(但这不是一个合法的查询):

SELECT DISTINCT Zipcodes.CountyID,
SUM(us_co_est2005_allData.PopEstimate2005) AS Population2005, 
SUM(us_co_est2005_allData.EstimatesBase2000) AS Population2000,
users_link_territory.userID
FROM
Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID = 
Users_link_territory.CountyID Inner Join
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code
= us_co_est2005_alldata.County
WHERE (users_link_territory.userid = 4)
GROUP BY users_link_territory.userid
Run Code Online (Sandbox Code Playgroud)

当然,只要我将Zipcodes.CountyID添加到GroupBy的末尾,我就会再次回到我的34行.

非常感谢您的帮助.

拉塞尔舒特.....

获得以下帮助后 - 特别是Robb的帮助 - …

sql row sum rows distinct

7
推荐指数
1
解决办法
8万
查看次数

SQL:条件AND在哪里

我正在尝试创建一个存储过程,允许省略参数,但如果提供了参数,则为AND:

CREATE PROCEDURE 
    MyProcedure

    @LastName Varchar(30) = NULL,
    @FirstName Varchar(30) = NULL,
    @SSN INT = NULL
AS

SELECT LastName, FirstName, RIGHT(SSN,4) as SSN
FROM Employees
WHERE 
    (
        (LastName like '%' + ISNULL(@LastName, '') + '%')
            AND 
        (FirstName like '%' + ISNULL(@FirstName, '') + '%')
    )
AND
    (SSN = @SSN)
Run Code Online (Sandbox Code Playgroud)

如果提供了@SSN,我只想做AND.或者还有其他方法可以做到这一点吗?

如果提供了SSN,则查询的LastName/FirstName部分将返回所有记录.如果只提供了姓氏/名字,那么AND会使它不会返回任何记录,因为SSN不会验证.

想法?


额外的澄清

假设一个基本记录集:

First          Last          SSN  
Mike           Smith         123456789  
Tom            Jones         987654321
Run Code Online (Sandbox Code Playgroud)

如果我们改变上面的过程,那么它不包括这个块:

AND
    (SSN = @SSN)
Run Code Online (Sandbox Code Playgroud)

如果我们传递了FirstName或LastName,那么一切都很好.但我希望能够包含SSN,如果有的话.

如果我将AND更改为OR,那么我得到一个错误的结果集,因为查询的FirstName/LastName部分evalute为:

WHERE (LastName like '%%' and FirstName like '%%')
Run Code Online (Sandbox Code Playgroud)

(当然,这将返回所有记录)


如果我不能有条件地中止AND,我希望有类似的东西: …

sql sql-server where

5
推荐指数
1
解决办法
5597
查看次数

超慢查询...我做错了什么?

你们真是太棒了.在过去的几天里,我已经在这里发布了两次 - 一个新用户 - 我被帮助感到震惊.所以,我想我会在我的软件中查看最慢的查询,看看是否有人可以帮助我加快速度.我将此查询用作视图,因此快速(并且不是!)非常重要.

首先,我有一个存储我公司客户的联系人表.在表中是一个JobTitle列,其中包含在Contacts_Def_JobFunctions表中定义的ID.还有一个名为contacts_link_job_functions的表,其中包含contactID编号和客户具有的其他作业功能 - 也在Contacts_Def_JobFunctions表中定义.

其次,Contacts_Def_JobFunctions表记录与它们自己有父/子关系.通过这种方式,我们将类似的工作职能集中在一起(例如:女仆,洗衣服务,家务管理,清洁等等都是基本工作 - 而职称可能会有所不同).我们目前不使用的工作职能被保留为ParentJobID 1841的子女.

第三,使用zipcodes附加的机构只是为最终结果提供地理数据.

最后,与所有负责任的公司一样,我们为希望选择退出我们的新闻通讯(选择加入后)的任何客户提供删除列表.

我使用以下查询来构建一个表格,其中列出了那些选择接收我们的新闻通讯并且具有与我们提供的服务/产品相关的工作职能或职位的人员.

这是我的UGLY查询:

SELECT DISTINCT 
    dbo.contacts_link_emails.Email, dbo.contacts.ContactID, dbo.contacts.First AS ContactFirstName, dbo.contacts.Last AS ContactLastName, dbo.contacts.InstitutionID, 
    dbo.institutionswithzipcodesadditional.CountyID, dbo.institutionswithzipcodesadditional.StateID, dbo.institutionswithzipcodesadditional.DistrictID
FROM         
    dbo.contacts_def_jobfunctions AS contacts_def_jobfunctions_3 
INNER JOIN
    dbo.contacts 
INNER JOIN
    dbo.contacts_link_emails 
        ON dbo.contacts.ContactID = dbo.contacts_link_emails.ContactID 
        ON contacts_def_jobfunctions_3.JobID = dbo.contacts.JobTitle 
INNER JOIN
    dbo.institutionswithzipcodesadditional 
        ON dbo.contacts.InstitutionID = dbo.institutionswithzipcodesadditional.InstitutionID 
LEFT OUTER JOIN
    dbo.contacts_def_jobfunctions 
INNER JOIN
    dbo.contacts_link_jobfunctions 
        ON dbo.contacts_def_jobfunctions.JobID = dbo.contacts_link_jobfunctions.JobID 
        ON dbo.contacts.ContactID = dbo.contacts_link_jobfunctions.ContactID
WHERE     
        (dbo.contacts.JobTitle IN
        (SELECT     JobID
        FROM          dbo.contacts_def_jobfunctions AS contacts_def_jobfunctions_1
        WHERE …
Run Code Online (Sandbox Code Playgroud)

sql join unique distinct

3
推荐指数
1
解决办法
252
查看次数

如何通过一个查询从单个列中获取多个COUNT个?

在我写的一个应用程序中,我有很多查询似乎应该是一个...但我无法弄清楚如何做到这一点.

这是一个示例:

SELECT SUM(enrollment) AS SchoolEnrollment, COUNT(institutionID) AS NumberOfSchools
FROM Schools
WHERE LevelID IN (4,5,6,7,8,14,15,16,20)

SELECT SUM(enrollment) AS SchoolEnrollment, COUNT(institutionID) AS NumberOfSchools
FROM Schools
WHERE LevelID IN (10,11)
Run Code Online (Sandbox Code Playgroud)

然后我有四个相同的其他查询,只是在最后一行中包含的LevelID不同.我基本上可以根据他们提供的年级水平获得入学人数和学校数量.

请记住,我不仅需要结果(我可以简单地UNION这些查询),我需要知道哪个数字是哪个.

谢谢你的建议.

拉塞尔舒特

sql sql-server sql-server-2005

2
推荐指数
1
解决办法
1872
查看次数

标签 统计

sql ×4

distinct ×2

sql-server ×2

join ×1

row ×1

rows ×1

sql-server-2005 ×1

sum ×1

unique ×1

where ×1