给出SQL Server 2005中的下表:
ID Col1 Col2 Col3
-- ---- ---- ----
1 3 34 76
2 32 976 24
3 7 235 3
4 245 1 792
Run Code Online (Sandbox Code Playgroud)
编写产生以下结果的查询的最佳方法是什么(即产生最终列的查询 - 包含每行的Col1,Col2和Col3中的minium值的列)?
ID Col1 Col2 Col3 TheMin
-- ---- ---- ---- ------
1 3 34 76 3
2 32 976 24 24
3 7 235 3 3
4 245 1 792 1
Run Code Online (Sandbox Code Playgroud)
更新:
为了澄清(正如我在演讲中所说),在真实场景中,数据库已正确规范化.这些"数组"列不在实际表中,而是在报表中所需的结果集中.新要求是报告还需要此MinValue列.我无法更改基础结果集,因此我期待T-SQL获得一个方便的"走出监狱卡".
我尝试了下面提到的CASE方法并且它有效,尽管它有点麻烦.它也比答案中说明的更复杂,因为你需要满足同一行中有两个最小值的事实.
无论如何,我想我会发布我目前的解决方案,鉴于我的限制,它的效果非常好.它使用UNPIVOT运算符:
with cte (ID, Col1, Col2, Col3)
as
(
select ID, …Run Code Online (Sandbox Code Playgroud) 我使用SQL Server 2008在我的计算机上创建了一个dtsx包.它将数据从分号分隔的csv文件导入到一个表中,其中所有字段类型都是NVARCHAR MAX.
它适用于我的计算机,但它需要在客户端服务器上运行.每当他们使用相同的csv文件和目标表创建相同的包时,他们就会收到上述错误.
我们已经逐步完成了包的创建,一切似乎都没问题.映射都是正确的,但是当它们在最后一步中运行包时,它们会收到此错误.他们正在使用SQL Server 2005.
任何人都可以建议从哪里开始寻找这个问题?
有人可以解释这两个 - 索引关键列VS索引列?
目前,我的索引有4个索引键列和0个包含列.
谢谢
我可以添加一个我指定为NOT NULL的列,我不想指定DEFAULT值,但是MS-SQL 2005说:
ALTER TABLE只允许添加可以包含空值的列,或者指定了DEFAULT定义,或者添加的列是标识或时间戳列,或者如果以前的条件都不满足,则表必须为空以允许添加这个专栏.列'test'不能添加到非空表'shiplist'中,因为它不满足这些条件.
如果是,请告诉我语法,如果不,请说明原因.
不久之前,我有一个查询,我为我的一个用户运行了很多.它仍然在进化和调整,但最终它稳定并且运行得非常快,所以我们从中创建了一个存储过程.
到目前为止,这是正常的.
但是,存储过程很慢.查询和proc之间没有实质性差异,但速度变化很大.
[后台,我们正在运行SQL Server 2005.]
友好的本地DBA(不再在这里工作)看了一下存储过程并说"参数欺骗!" (编辑:虽然它似乎也可能被称为'参数嗅探',这可能解释了当我试图搜索它时谷歌的点击率很低.)
我们将一些存储过程抽象到第二个存储过程,将对这个新内部过程的调用包装到预先存在的外部过程中,称为外层过程,嘿,它与原始查询一样快.
那么,是什么给出的?有人可以解释参数欺骗吗?
奖金积分
我想将一些SQL Server 2005数据导出为CSV格式(用逗号分隔引号).我可以想到很多复杂的方法,但我想以正确的方式做到这一点.我看过bcp,但我无法弄清楚如何在字段周围添加引号(除了将它们连接到字段值,这很难看).我想我可以用sqlcmd和-o做到这一点,但出于同样的原因,这似乎很难看.
有没有bcp方式来做到这一点?
有合理的sqlcmd方法吗?
管理工作室内置了一些非常简单的实用工具吗?
我已经看到了许多不同的方法来创建和填充数字表.但是,创建和填充一个的最佳方法是什么?从最重要到最不重要的"最佳"被定义:
如果你不知道数字表是什么,请看这里:我为什么要考虑使用辅助数字表?
我正在将ticks值转换为这样的日期:
Convert(datetime, (MachineGroups.TimeAdded - 599266080000000000)/864000000000);
Run Code Online (Sandbox Code Playgroud)
使用这个我得到:
9/27/2009 10:50:27 PM
Run Code Online (Sandbox Code Playgroud)
但我想要这种格式的日期:
October 1, 2009
Run Code Online (Sandbox Code Playgroud)
我的样本滴答值是
633896886277130000
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?
我想在SQL中比较两个varchars,一个是类似的Cafe,另一个Café在SQL中有一种方法可以比较两个值.例如:
SELECT *
FROM Venue
WHERE Name Like '%cafe%'
Run Code Online (Sandbox Code Playgroud)
那么,如果有一个名称的场所,Big Bobs Café Extraordinaire它将被包含在结果集中?
我有以下内容:
CREATE NONCLUSTERED INDEX [MyTableIndex]
ON [dbo].[tablename] ([tablename_ID],[tablename_Field1])
INCLUDE ([Tablename_Field2],[Tablename_Field3])
Run Code Online (Sandbox Code Playgroud)
我想创建一个if语句来检查它是否存在.我该怎么做呢?
sql-server-2005 ×10
sql-server ×6
t-sql ×5
sql ×2
asp.net ×1
bcp ×1
c# ×1
collation ×1
min ×1
non-unicode ×1
sqlcmd ×1
ssis ×1
types ×1
unicode ×1