我正在构建一个带有GROUP BY子句的查询,该子句需要能够仅根据某个条件计算记录(例如,只计算某个列值等于1的记录).
SELECT UID,
COUNT(UID) AS TotalRecords,
SUM(ContractDollars) AS ContractDollars,
(COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1
FROM dbo.AD_CurrentView
GROUP BY UID
HAVING SUM(ContractDollars) >= 500000
Run Code Online (Sandbox Code Playgroud)
该COUNTIF()行明显失败,因为没有调用本机SQL函数COUNTIF,但这里的想法是确定MyColumn值为"1"的所有行的百分比.
有关如何在MS SQL 2005环境中正确实现它的任何想法?
SQL Server中的数据库和架构之间有什么区别?两者都是表和数据的容器.
如果删除了Schema,那么该架构中包含的所有表是否也会自动删除,或者在删除数据库时是否删除它们?
我一直在使用这一段时间:
SUBSTRING(str_col, PATINDEX('%[^0]%', str_col), LEN(str_col))
Run Code Online (Sandbox Code Playgroud)
但是最近,我发现所有"0"字符的列都有问题,例如'00000000',因为它永远找不到匹配的非"0"字符.
我见过的另一种技术是使用TRIM:
REPLACE(LTRIM(REPLACE(str_col, '0', ' ')), ' ', '0')
Run Code Online (Sandbox Code Playgroud)
如果存在嵌入空格,则会出现问题,因为当空格变回"0"时,它们将变为"0".
我试图避免使用标量UDF.我在SQL Server 2005中发现了很多UDF的性能问题.
我在本地计算机上创建了一个数据库,然后执行了一个名为tables.baktable 的备份DataLabTables.
我将该备份移动到没有该表的远程计算机并尝试进行还原但出现以下错误:
System.Data.SqlClient.SqlError:在'c:\ Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables上尝试'RestoreContainer :: ValidateTargetForCreation'时,操作系统返回错误'5(访问被拒绝.)'密度纤维板".
如果这是问题,我如何修复我的权利?
我们如何针对查询批处理检查针对哪些行应用了哪些数据库锁?
任何突出显示表行级锁定的工具?
DB:SQL Server 2005
如何在SQL Server上找到当前数据库的事务级别?
sql sql-server sql-server-2005 isolation-level sql-server-2008
我有一个非常基本的LEFT OUTER JOIN来返回左表中的所有结果以及来自更大表的一些附加信息.左表包含4935条记录,但当我将其连接到另一个表时,记录计数明显更大.
据我所知,LEFT OUTER JOIN将返回左表中的所有记录,右表中的匹配记录和任何无法匹配的行的空值,这是绝对的福音,因此我的理解是它应该不可能返回比左表中存在的行更多的行,但它发生的一切都是一样的!
SQL查询如下:
SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM SUSP.Susp_Visits LEFT OUTER JOIN
DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
Run Code Online (Sandbox Code Playgroud)
也许我在语法上犯了一个错误,或者我对LEFT OUTER JOIN的理解是不完整的,希望有人可以解释这是如何发生的?
后记
感谢你们给出了很好的答案,我对LEFT OUTER JOINS的理解现在要好得多,但是有人可以提出一种方法可以修改这个查询,这样我只能获得与左表中存在的记录一样多的记录吗?
此查询纯粹是为了生成报告,而重复的匹配只是简单地混淆了问题.
/后记
我有两个使用SqlServer 2005的t-sql查询.如何测量每个查询运行所需的时间?
使用我的秒表不会削减它.
我似乎无法从站点连接到我的数据库.我收到此错误:
命名管道提供程序,错误:40 - 无法打开与SQL Server的连接
我尝试使用本地IP地址连接以及公共IP地址.我试过了:
我还能在这做什么?
sql-server-2005 ×10
sql-server ×7
sql ×6
database ×2
performance ×2
t-sql ×2
backup ×1
restore ×1
string ×1