标签: sql-server

如何通过除以两个整数值来获得浮点结果?

当我在2个整数之间进行除法时,我想指定小数位数,如:

select 1/3
Run Code Online (Sandbox Code Playgroud)

目前返回0.我希望它能回来0,33.

就像是:

select round(1/3, -2)
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我怎样才能达到预期的效果?

sql-server rounding division sql-server-2008

159
推荐指数
6
解决办法
27万
查看次数

我想使用CASE语句更新sql server 2005中的一些记录

UPDATE dbo.TestStudents  
SET LASTNAME = 
( CASE  
WHEN (LASTNAME = 'AAA') THEN 'BBB' 
WHEN (LASTNAME = 'CCC') THEN 'DDD' 
WHEN (LASTNAME = 'EEE') THEN 'FFF' 
ELSE  (LASTNAME)
END )
Run Code Online (Sandbox Code Playgroud)

该语句适用于此目的,但else条件扫描表中的每条记录.有什么方法可以保留未受影响的行吗?

sql t-sql sql-server sql-update

159
推荐指数
3
解决办法
48万
查看次数

如何使用SQL语句计算百分比

我有一个包含用户及其成绩的SQL Server表.为简单起见,我们只想说有2列 - name&grade.所以一个典型的行是Name:"John Doe",等级:"A".

我正在寻找一个SQL语句,它将找到所有可能答案的百分比.(A,B,C等......)另外,有没有办法在没有定义所有可能的答案的情况下这样做(开放文本字段 - 用户可以输入'通过/失败','无'等...)

我要找的最终输出是A:5%,B:15%,C:40%等等......

sql t-sql sql-server

158
推荐指数
8
解决办法
79万
查看次数

计算SQL Server中的运行总计

想象一下下表(称为TestTable):

id     somedate    somevalue
--     --------    ---------
45     01/Jan/09   3
23     08/Jan/09   5
12     02/Feb/09   0
77     14/Feb/09   7
39     20/Feb/09   34
33     02/Mar/09   6
Run Code Online (Sandbox Code Playgroud)

我想要一个以日期顺序返回运行总计的查询,例如:

id     somedate    somevalue  runningtotal
--     --------    ---------  ------------
45     01/Jan/09   3          3
23     08/Jan/09   5          8
12     02/Feb/09   0          8
77     14/Feb/09   7          15  
39     20/Feb/09   34         49
33     02/Mar/09   6          55
Run Code Online (Sandbox Code Playgroud)

我知道在SQL Server 2000/2005/2008中有各种方法可以做到这一点.

我对使用aggregate-set-statement技巧的这种方法特别感兴趣:

INSERT INTO @AnotherTbl(id, somedate, somevalue, runningtotal) 
   SELECT id, somedate, somevalue, null
   FROM TestTable
   ORDER …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server running-total

158
推荐指数
8
解决办法
23万
查看次数

在SQL Server中限制10..20

我正在尝试做类似的事情:

SELECT * FROM table LIMIT 10,20
Run Code Online (Sandbox Code Playgroud)

要么

SELECT * FROM table LIMIT 10 OFFSET 10
Run Code Online (Sandbox Code Playgroud)

但是使用SQL Server

我找到的唯一解决方案看起来像是矫枉过正:

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases 
 ) a WHERE row > 5 and row <= 10
Run Code Online (Sandbox Code Playgroud)

我还发现:

SELECT TOP 10 * FROM stuff; 
Run Code Online (Sandbox Code Playgroud)

...但这不是我想要做的,因为我无法指定起始限制.

我还有另一种方法吗?

另外,只是好奇,有没有一个理由为什么SQL Server不支持该LIMIT功能或类似的东西?我不想吝啬,但这听起来像DBMS需要的东西......如果确实如此,那么我很抱歉这么无知!我在过去的5年里一直在使用MySQL和SQL +所以......

sql sql-server pagination limit

158
推荐指数
7
解决办法
28万
查看次数

在SQL中获取最少两个值

我有两个变量,一个是调用PaidThisMonth,另一个是调用OwedPast.它们都是SQL中某些子查询的结果.如何选择两者中较小的一个并将其作为标题值返回PaidForPast

MIN函数适用于列,而不是变量.

t-sql sql-server

158
推荐指数
7
解决办法
22万
查看次数

在SQL Server查询中将NULL替换为0

我已经开发了一个查询,并在前三列的结果中得到了NULL.我该如何更换0

  Select c.rundate, 
    sum(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded, 
    sum(case when c.runstatus = 'Failed' then 1 end) as Failed, 
    sum(case when c.runstatus = 'Cancelled' then 1 end) as Cancelled, 
    count(*) as Totalrun from
    (    Select a.name,case when b.run_status=0 Then 'Failed' when b.run_status=1 Then 'Succeeded'
    when b.run_status=2 Then 'Retry' Else 'Cancelled' End as Runstatus,
    ---cast(run_date as datetime)
                cast(substring(convert(varchar(8),run_date),1,4)+'/'+substring(convert(varchar(8),run_date),5,2)+'/'          +substring(convert(varchar(8),run_date),7,2) as Datetime) as RunDate
    from msdb.dbo.sysjobs as a(nolock) inner join msdb.dbo.sysjobhistory as b(nolock) 
    on …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

158
推荐指数
8
解决办法
61万
查看次数

如何根据出生日期和getDate()计算年龄(以年为单位)

我有一张桌子列出了人们的出生日期(目前是nvarchar(25))

如何将其转换为日期,然后计算年龄?

我的数据如下

ID    Name   DOB
1     John   1992-01-09 00:00:00
2     Sally  1959-05-20 00:00:00
Run Code Online (Sandbox Code Playgroud)

我想看看:

ID    Name   AGE  DOB
1     John   17   1992-01-09 00:00:00
2     Sally  50   1959-05-20 00:00:00
Run Code Online (Sandbox Code Playgroud)

sql-server select sql-server-2005 date

157
推荐指数
10
解决办法
56万
查看次数

在SQL中更改表的架构名称

我想Employees在数据库中更改表的模式名称.在当前表Employees数据库模式名称是dbo我想要更改为exe.我该怎么做 ?

例:

dbo.Employees
Run Code Online (Sandbox Code Playgroud)

exe.Employees
Run Code Online (Sandbox Code Playgroud)

我试过这个查询:

ALTER SCHEMA exe TRANSFER dbo.Employees
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

无法更改架构'exe',因为它不存在或您没有权限.

我错过了什么?

sql t-sql sql-server schema

157
推荐指数
6
解决办法
24万
查看次数

Tablix:每个页面上的重复标题行不起作用 - Report Builder 3.0

我有一个包含许多行的Tablix,这些行跨越多个页面.我已经在每个页面上设置了Tablix属性重复标题行,但这不起作用.我在某处读到这是Report Builder 3.0中的已知错误.这是真的?如果没有,还有什么需要做的吗?

sql-server reporting-services ssrs-tablix reportbuilder3.0

156
推荐指数
5
解决办法
15万
查看次数