标签: t-sql

如何在不考虑时间的情况下按日期时间列进行分组

我有一堆产品订单,我正在尝试按日期分组并总结该日期的数量.如何在不考虑时间的情况下按月/日/年进行分组?

3/8/2010 7:42:00 应该与...分组 3/8/2010 4:15:00

sql t-sql sql-server sql-server-2008

194
推荐指数
5
解决办法
23万
查看次数

SQL:WHERE子句中的IF子句

是否可以在MS SQL中的WHERE子句中使用IF子句?

例:

WHERE
    IF IsNumeric(@OrderNumber) = 1
        OrderNumber = @OrderNumber
    ELSE
        OrderNumber LIKE '%' + @OrderNumber + '%'
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

191
推荐指数
6
解决办法
77万
查看次数

如何在SQL Server中删除外键?

我已经通过以下方式创建了一个外键(在SQL Server中):

alter table company add CountryID varchar(3);
alter table company add constraint Company_CountryID_FK foreign key(CountryID) 
references Country;
Run Code Online (Sandbox Code Playgroud)

然后我运行此查询:

alter table company drop column CountryID;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

消息5074,级别16,状态4,行2
对象'Company_CountryID_FK'依赖于列'CountryID'.
消息4922,级别16,状态9,行2
ALTER TABLE DROP COLUMN CountryID失败,因为一个或多个对象访问此列

我试过这个,但它似乎不起作用:

alter table company drop foreign key Company_CountryID_FK; 
alter table company drop column CountryID;
Run Code Online (Sandbox Code Playgroud)

删除CountryID列需要做什么?

谢谢.

t-sql sql-server

190
推荐指数
5
解决办法
31万
查看次数

如何在不知道其名称的情况下删除SQL默认约束?

在Microsoft SQL Server中,我知道查询是否存在列的默认约束并删除默认约束是:

IF EXISTS(SELECT * FROM sysconstraints
  WHERE id=OBJECT_ID('SomeTable')
  AND COL_NAME(id,colid)='ColName'
  AND OBJECTPROPERTY(constid, 'IsDefaultCnst')=1)    
ALTER TABLE SomeTable DROP CONSTRAINT DF_SomeTable_ColName
Run Code Online (Sandbox Code Playgroud)

但由于以前版本的数据库中的拼写错误,约束的名称可能是DF_SomeTable_ColNameDF_SmoeTable_ColName.

如何在没有任何SQL错误的情况下删除默认约束?默认约束名称不会显示在INFORMATION_SCHEMA表中,这会使事情变得有点棘手.

因此,类似于"删除此表/列中的默认约束"或"删除DF_SmoeTable_ColName",但如果无法找到它,则不会出现任何错误.

sql t-sql sql-server

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

SQL Server动态PIVOT查询?

我的任务是提出翻译以下数据的方法:

date        category        amount
1/1/2012    ABC             1000.00
2/1/2012    DEF             500.00
2/1/2012    GHI             800.00
2/10/2012   DEF             700.00
3/1/2012    ABC             1100.00
Run Code Online (Sandbox Code Playgroud)

进入以下内容:

date        ABC             DEF             GHI
1/1/2012    1000.00
2/1/2012                    500.00
2/1/2012                                    800.00
2/10/2012                   700.00
3/1/2012    1100.00
Run Code Online (Sandbox Code Playgroud)

空白点可以是NULL或空白,也可以是好的,并且类别需要是动态的.另一个可能的警告是,我们将以有限的容量运行查询,这意味着临时表已经出局.我已经尝试过研究并且已经登陆了,PIVOT但是在我真的不理解它之前我从未使用过它,尽管我尽了最大的努力去解决它.谁能指出我正确的方向?

sql t-sql sql-server pivot

190
推荐指数
5
解决办法
20万
查看次数

多语句表值函数与内联表值函数

举几个例子,只是说:

内联表值

CREATE FUNCTION MyNS.GetUnshippedOrders()
RETURNS TABLE
AS 
RETURN SELECT a.SaleId, a.CustomerID, b.Qty
    FROM Sales.Sales a INNER JOIN Sales.SaleDetail b
        ON a.SaleId = b.SaleId
        INNER JOIN Production.Product c ON b.ProductID = c.ProductID
    WHERE a.ShipDate IS NULL
GO
Run Code Online (Sandbox Code Playgroud)

多语句表值

CREATE FUNCTION MyNS.GetLastShipped(@CustomerID INT)
RETURNS @CustomerOrder TABLE
(SaleOrderID    INT         NOT NULL,
CustomerID      INT         NOT NULL,
OrderDate       DATETIME    NOT NULL,
OrderQty        INT         NOT NULL)
AS
BEGIN
    DECLARE @MaxDate DATETIME

    SELECT @MaxDate = MAX(OrderDate)
    FROM Sales.SalesOrderHeader
    WHERE CustomerID = @CustomerID

    INSERT @CustomerOrder
    SELECT a.SalesOrderID, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server user-defined-functions sql-server-2008

188
推荐指数
3
解决办法
20万
查看次数

恢复未保存的SQL查询脚本

如果SSMS崩溃/未保存的选项卡被意外关闭,如何恢复未保存的脚本?

sql t-sql sql-server ssms sql-server-2012

187
推荐指数
10
解决办法
24万
查看次数

在SQL Server中截断(不舍入)小数位

我正在尝试确定在SQL中截断或删除额外小数位的最佳方法,而不进行舍入.例如:

declare @value decimal(18,2)

set @value = 123.456
Run Code Online (Sandbox Code Playgroud)

这将自动围绕@Value为123.46 ....这在大多数情况下是好的.但是,对于这个项目,我不需要那样做.是否有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并转换回小数......还有其他方法吗?

sql t-sql sql-server rounding

184
推荐指数
9
解决办法
61万
查看次数

在多列上计算DISTINCT

有没有更好的方法来执行这样的查询:

SELECT COUNT(*) 
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
      FROM DocumentOutputItems) AS internalQuery
Run Code Online (Sandbox Code Playgroud)

我需要计算此表中不同项目的数量,但不同的是超过两列.

我的查询工作正常,但我想知道我是否只使用一个查询得到最终结果(不使用子查询)

sql t-sql sql-server

184
推荐指数
9
解决办法
41万
查看次数

如何在T-SQL中使用逗号格式化数字?

我正在运行一些管理查询并sp_spaceused在SQL Server 2008中编译结果,以查看数据库中某些表的数据/索引空间比率.当然,我在结果中得到了各种各样的大数字,我的眼睛开始变得光彩照人.如果我可以用逗号格式化所有这些数字将非常方便(987654321变为987,654,321).有趣的是,在我使用SQL Server的这么多年里,这个问题从来没有出现,因为大多数时候我会在表示层进行格式化,但在这种情况下,SSMS中的T-SQL结果就是表示.

我只考虑创建一个简单的CLR UDF来解决这个问题,但看起来这应该只是普通的旧T-SQL.那么,我将在这里提出问题 - 你如何在vanilla T-SQL中进行数字格式化?

t-sql sql-server

183
推荐指数
9
解决办法
45万
查看次数