回顾这个问题,似乎不需要做很多工作。他们试图用日期扩展范围。在其他数据库中,您只需使用greatest和least..
least(extendDate,min), greatest(extendDate,max)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用这些时,我得到
'least' is not a recognized built-in function name.
'greatest' is not a recognized built-in function name.
Run Code Online (Sandbox Code Playgroud)
这将涵盖任一方向的扩展。
就问题而言,您仍然需要进行排他性范围替换。
我只是想知道 SQL Server 用户如何实现查询模式来模仿least和greatest功能。
GREATEST/LEASTGREATEST/LEASTGREATEST LEASTGREATEST LEASTGREATEST LEAST您是否将条件展开到CASE语句中,或者是否存在启用此功能的 Microsoft 的扩展、第三方加载项或许可?
我需要找到一种方法来获取SUM()所有正值的所有正值num并返回SUM()所有正数的值和每个负数的单独行。下面是一个示例 DDL:
Create Table #Be
(
id int
, salesid int
, num decimal(16,4)
)
Insert Into #BE Values
(1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00)
, (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23)
, (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32)
Run Code Online (Sandbox Code Playgroud)
这是我想要的输出(每个 salesid 的正数SUM()和负数得到单独的一行返回):
salesid num
1 26.32
1 -13.00
2 47.35
3 -12.32
3 -43.23
3 -2.32
Run Code Online (Sandbox Code Playgroud) 我有一个 SQL 查询,其别名与其子查询的某些别名相同。
例如:
select *
from ROOM r
where ...
(
select *
from ROAD r
where ...
)
Run Code Online (Sandbox Code Playgroud)
这很好用,因为子查询的别名似乎隐藏了主要的。
r?我有一个表,其中有一个 ID、一个值和一个日期。此表中有许多 ID、值和日期。
记录会定期插入到此表中。ID 将始终保持不变,但有时值会发生变化。
我如何编写一个查询,该查询将为我提供 ID 以及该值更改的最近时间?注意:该值将始终增加。
从这个样本数据:
Create Table Taco
( Taco_ID int,
Taco_value int,
Taco_date datetime)
Insert INTO Taco
Values (1, 1, '2012-07-01 00:00:01'),
(1, 1, '2012-07-01 00:00:02'),
(1, 1, '2012-07-01 00:00:03'),
(1, 1, '2012-07-01 00:00:04'),
(1, 2, '2012-07-01 00:00:05'),
(1, 2, '2012-07-01 00:00:06'),
(1, 2, '2012-07-01 00:00:07'),
(1, 2, '2012-07-01 00:00:08')
Run Code Online (Sandbox Code Playgroud)
结果应该是:
Taco_ID Taco_date
1 2012-07-01 00:00:05
Run Code Online (Sandbox Code Playgroud)
(因为 00:05 是最后一次Taco_Value更改。)
我有两张桌子
@T1 TABLE
(
Id INT,
Date DATETIME
)
@T2 TABLE
(
Id INT,
Date DATETIME
)
Run Code Online (Sandbox Code Playgroud)
这些表在 (Id, Date) 上有一个非聚集索引
我加入这些表
SELECT *
FROM T1 AS t1
INNER JOIN T2 AS t2
ON
t1.Id = t2.Id
WHERE
t1.Date <= GETDATE()
AND
t2.Date <= GETDATE()
Run Code Online (Sandbox Code Playgroud)
这也可以写成
SELECT *
FROM T1 AS t1
INNER JOIN T2 AS t2
ON
t1.Id = t2.Id
AND
t1.Date <= GETDATE()
AND
t2.Date <= GETDATE()
Run Code Online (Sandbox Code Playgroud)
我的问题是,这两个查询中哪一个提供了更好的性能,为什么?或者他们是平等的?
我正在使用Dapper对来自 ASP.NET MVC 3 (.NET 4.0) 应用程序的 SQL Server 2008 R2 Express 实例执行以下查询。
INSERT INTO Customers (
Type, Name, Address, ContactName,
ContactNumber, ContactEmail, Supplier)
VALUES (
@Type, @Name, @Address, @ContactName,
@ContactNumber, @ContactEmail, @Supplier)
SELECT @@IDENTITY
Run Code Online (Sandbox Code Playgroud)
对 的调用connection.Query<int>(sql, ...)正在引发无效的强制转换异常。我已经调试了它,它是在 Dapper 调用GetValue返回的SqlDataReader.
的返回类型GetValue是Object,在调试器中检查它显示它是一个装箱十进制。
如果我将选择更改为SELECT CAST(@@IDENTITY as int),则 GetValue 的返回是一个装箱的 int 并且不会引发异常。
Id 列绝对是 int 类型;为什么会SELECT @@IDENTITY返回一个小数?
一些附加信息:
在SQL Server 2008中,我使用RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)与返回的数据集RANK。但是我每个分区有数百条记录,所以我将从等级 1、2、3......999 中获取值。但我只想RANKs在每个PARTITION.
例子:
ID Name Score Subject
1 Joe 100 Math
2 Jim 99 Math
3 Tim 98 Math
4 Joe 99 History
5 Jim 100 History
6 Tim 89 History
7 Joe 80 Geography
8 Tim 100 Geography
9 Jim 99 Geography
Run Code Online (Sandbox Code Playgroud)
我希望结果是:
SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC)
FROM Table
Run Code Online (Sandbox Code Playgroud)
Subject Name Rank …Run Code Online (Sandbox Code Playgroud) MSDN“缺少连接谓词事件类”表示“表示正在执行没有连接谓词的查询”。
但不幸的是,这似乎并不那么容易。
例如,非常简单的情况:
create table #temp1(i int);
create table #temp2(i int);
Select * from #temp1, #temp2 option (recompile);
Run Code Online (Sandbox Code Playgroud)
表中没有数据,也没有警告,尽管它显然没有连接谓词。
如果我查看 SQL Server 2005 的文档(相同的链接,只是其他服务器版本),会有一句额外的句子:“仅当连接的双方返回多于一行时才会产生此事件。 ”这将使在以前的情况下完美的感觉。没有数据,所以双方都返回0行,没有警告。插入行,得到警告。嗯不错。
但是对于下一个令人困惑的情况,我在两个表中插入相同的值:
Insert into #temp1 (i) values (1)
Insert into #temp1 (i) values (1)
Insert into #temp2 (i) values (1)
Insert into #temp2 (i) values (1)
Run Code Online (Sandbox Code Playgroud)
我得到:
-- no warning:
Select * from #temp1 t1
inner join #temp2 t2 on t1.i = t2.i
option (recompile)
-- has warning:
Select * from …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助来找出以下T-SQL语句返回的原因1(true):
SELECT IIF( 0 = '', 1, 0)
Run Code Online (Sandbox Code Playgroud)
我猜有人改变了一个ANSI选项,比如SET ANSI_NULLS导致这种行为的其他东西。
我的问题是我加入了一些值,在最后一行集中我有由0和''值连接的值,这是不正确的。
我是 T-SQL 的初学者。我想确定输入字符串是否是回文,如果不是,则输出 = 0,如果是,则输出 = 1。我仍在弄清楚语法。我什至没有收到错误消息。我正在寻找不同的解决方案和一些反馈,以更好地理解和了解 T-SQL 的工作原理,从而变得更好——我仍然是一名学生。
在我看来,关键思想是将最左边和最右边的字符相互比较,检查是否相等,然后继续比较左边第二个字符和倒数第二个字符,依此类推。我们做一个循环:如果字符彼此相等,我们继续。如果到达终点,则输出 1,否则,输出 0。
请您批评一下:
CREATE function Palindrome(
@String Char
, @StringLength Int
, @n Int
, @Palindrome BIN
, @StringLeftLength Int
)
RETURNS Binary
AS
BEGIN
SET @ n=1
SET @StringLength= Len(String)
WHILE @StringLength - @n >1
IF
Left(String,@n)=Right(String, @StringLength)
SET @n =n+1
SET @StringLength =StringLength -1
RETURN @Binary =1
ELSE RETURN @Palindrome =0
END
Run Code Online (Sandbox Code Playgroud)
我认为我在正确的轨道上,但我还有很长的路要走。有任何想法吗?