标签: sql-server-2005

Sql Server相当于COUNTIF聚合函数

我正在构建一个带有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 sql-server-2005

152
推荐指数
4
解决办法
33万
查看次数

数据库和架构之间的区别

SQL Server中的数据库和架构之间有什么区别?两者都是表和数据的容器.

如果删除了Schema,那么该架构中包含的所有表是否也会自动删除,或者在删除数据库时是否删除它们?

database sql-server sql-server-2005 database-schema

151
推荐指数
5
解决办法
19万
查看次数

更好的修剪SQL Server中前导零的技术?

我一直在使用一段时间:

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的性能问题.

sql t-sql sql-server string sql-server-2005

150
推荐指数
5
解决办法
24万
查看次数

使用sql查询将字符串转换为int

如何在SQL Server 2005上使用SQL查询将字符串转换为整数?

sql sql-server-2005

150
推荐指数
3
解决办法
70万
查看次数

SQL Server还原错误 - 拒绝访问

我在本地计算机上创建了一个数据库,然后执行了一个名为tables.baktable 的备份DataLabTables.

我将该备份移动到没有该表的远程计算机并尝试进行还原但出现以下错误:

System.Data.SqlClient.SqlError:在'c:\ Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables上尝试'RestoreContainer :: ValidateTargetForCreation'时,操作系统返回错误'5(访问被拒绝.)'密度纤维板".

如果这是问题,我如何修复我的权利?

sql-server backup sql-server-2005 restore

148
推荐指数
6
解决办法
14万
查看次数

如何检查表上保存的锁

我们如何针对查询批处理检查针对哪些行应用了哪些数据库锁?

任何突出显示表行级锁定的工具?

DB:SQL Server 2005

sql database sql-server performance sql-server-2005

147
推荐指数
7
解决办法
61万
查看次数

147
推荐指数
5
解决办法
11万
查看次数

LEFT OUTER JOIN如何返回比左表中存在的更多记录?

我有一个非常基本的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的理解现在要好得多,但是有人可以提出一种方法可以修改这个查询,这样我只能获得与左表中存在的记录一样多的记录吗?

此查询纯粹是为了生成报告,而重复的匹配只是简单地混淆了问题.

/后记

sql t-sql sql-server sql-server-2005

146
推荐指数
9
解决办法
18万
查看次数

测量执行t-sql查询所需的时间

我有两个使用SqlServer 2005的t-sql查询.如何测量每个查询运行所需的时间?

使用我的秒表不会削减它.

performance sql-server-2005

145
推荐指数
5
解决办法
16万
查看次数

如何修复错误'命名管道提供程序,错误40 - 无法打开与'SQL Server'的连接?

我似乎无法从站点连接到我的数据库.我收到此错误:

命名管道提供程序,错误:40 - 无法打开与SQL Server的连接

我尝试使用本地IP地址连接以及公共IP地址.我试过了:

  1. 是的,该站点可以与服务器通信
  2. 命名管道/ TCP已启用.
  3. 允许远程连接.
  4. Windows防火墙已关闭
  5. 在Windows防火墙中为端口1433创建了一个例外.
  6. 在SQL Server配置管理器中启用了所有内容.

我还能在这做什么?

sql-server sql-server-2005 database-connectivity

139
推荐指数
10
解决办法
57万
查看次数