我想加入三个表并计算表A的总和(数量).我试了一下,得到了所需的输出.但我仍然混淆基于聚合函数和Group By子句.
在通过连接两个或多个表来计算总和值时,我们需要在Group By子句中提及哪些列,为什么我们需要提供这些列?
例如:这是我的表和所需的查询.
TableA: ItemID, JobOrderID, CustomerID, DivisionID, Quantity
TableB: ItemID, ItemName, SpecificationID
TableC: SpecificationID, SpecificationName
TableD: DivisionID, DivisionName
TableE: JobOrderID, JobOrderNo.
TableF: CustomerID, CustomerName
Run Code Online (Sandbox Code Playgroud)
我想根据获得的总和(数量)ItemID,CustomerID,JobOrderID和DivisionID.
我写了以下查询,它工作正常.但是,如果我删除Group By子句中的任何列,则它不会提供所需的结果.为什么?Group By子句在这里做什么?如何在使用Aggregate函数时指定Group By子句?这是我的查询.
SELECT
B.ItemName + ' - ' + C.SpecificationName AS 'ItemName',
SUM(A.Quantity) AS 'Quantity',
A.ItemID,
D.DivisionName,
F.CustomerName,
E.JobOrderNo,
A.DivisionID,
A.JobOrderID,
A.CustomerID
FROM
TableA A
INNER JOIN TableB B ON B.ItemID = A.ItemID
INNER JOIN TableC C ON C.SpecificationID = B.SpecificationID
INNER …Run Code Online (Sandbox Code Playgroud) 如何从此SQL Server varbinary中获取:
0x63C34D6BCAD555EB64BF7E848D02C376
Run Code Online (Sandbox Code Playgroud)
对这个varchar?
'63C34D6BCAD555EB64BF7E848D02C376'
Run Code Online (Sandbox Code Playgroud) 是否有可能知道如何/是否可以查看依赖于Sql Server 2008中链接服务器的所有表/视图/存储过程.基本上好像链接服务器可以访问上下文菜单"查看依赖关系"?
任何帮助非常感谢.
谢谢
是否可以拒绝SQL Server中所有内容的权限(例如,选择,插入等)并通过存储过程提供临时权限.我想只使用存储过程来访问sql数据库中的数据.
这可能还是有另一种方式?
使用四个不同的唯一条件,通过参数中单词的数量(计数)/匹配对sql varchar列进行排名的最佳方法是什么?这可能不是一个微不足道的问题,但我挑战根据"最佳匹配"使用我的标准来排序行.
column:description varchar(100)参数:@MyParameter varchar(100)
使用此订单首选项输出:
单词可能不完全匹配,因为单词的部分匹配是允许的,并且可能,lessor值应该应用于部分单词以进行排名但不是关键的(pot将匹配每个:pot,potter,potholder,depot,depotting).与其他单词匹配开始应该排名高于没有后续匹配的那些,但这不是交易杀手/超级重要.
我想有一个方法来排名列"以"开头"参数中的值".说我有以下字符串:
'This is my value string as a test template to rank on.'
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我希望得到最大字数存在的列/行的等级.
并且第二个基于开始时的出现(最佳匹配)排名为:
'This is my string as a test template to rank on.' - first
'This is my string as a test template to rank on even though not exact.'-second
'This is my string as a test template to rank' - third
'This is my string as a test template to' - next
'This …Run Code Online (Sandbox Code Playgroud) 给定Windows Server 2008 R2系统,其中服务帐户使用非英语显示语言,使用SQL Server 2008,以下Transact-SQL语句失败:
CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS ...
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
未找到Windows NT用户或组"NT AUTHORITY\NETWORK SERVICE".再次检查名称.
(或服务帐户的非英语显示语言中的相同消息,具体取决于上下文).
如果服务帐户使用英语作为其显示语言,则相同的语句会成功.
原因似乎很清楚:例如,在德国系统中,此帐户的显示名称是NT-AUTORITÄT\NETZWERKDIENST,并且名称NT AUTHORITY\NETWORK SERVICE(带空格)无法识别.此外,非本地化名称NT AUTHORITY\NETWORKSERVICE(无空格)也不起作用.
我的问题:我应该如何重写上述声明,使其无论显示语言如何都能正常工作?或者我被迫找出本地化名称(在我的情况下是InstallScript)?然后我就可以用了
CREATE LOGIN [NT-AUTORITÄT\NETZWERKDIENST] FROM WINDOWS
Run Code Online (Sandbox Code Playgroud)
哪个确实有用......
如何使用主键打印出列的"主键"?
如果表具有主键,而不是带有主键的一列和其他列在keyType中为空,则为所有列获取"主键".
SELECT c.TABLE_NAME,
c.COLUMN_NAME,
c.DATA_TYPE,
c.Column_default,
c.character_maximum_length,
c.numeric_precision,
c.is_nullable,
CASE
WHEN u.CONSTRAINT_TYPE = 'PRIMARY KEY' THEN 'primary key'
ELSE ''
END AS KeyType
FROM INFORMATION_SCHEMA.COLUMNS as c
LEFT JOIN information_schema.table_constraints as u ON c.table_name = u.table_name
ORDER BY table_name
Run Code Online (Sandbox Code Playgroud) sql-server sql-server-2005 constraints information-schema primary-key
继sql之后
declare @a as float, @b as float
select @a=1.353954 , @b=1.353956
select
CAST(@a as VARCHAR(40)) AS a_float_to_varchar ,
CAST(@b as VARCHAR(40)) AS b_float_to_varchar
Run Code Online (Sandbox Code Playgroud)
结果是
a_float_to_varchar b_float_to_varchar
---------------------------------------- ----------------------------------------
1.35395 1.35396
Run Code Online (Sandbox Code Playgroud)
基于
http://msdn.microsoft.com/en-us/library/ms173773.aspx
float具有15位数的精度,因此我不确定为什么在转换为varchar时该数字被舍入
我有一个非常糟糕的SQL查询.我将其追踪到桌面上执行的INNER JOIN.将此更改为LEFT join可显着提高性能(从6分钟到20秒) - 现在我知道2不等同,但......这就是我要问的
SELECT *
FROM SomeTable ST
JOIN BigTable BT ON BT.SomeID = ST.SomeID
AND BT.Something = ST.Something
AND BT.AnotherValue = '123'
Run Code Online (Sandbox Code Playgroud)
由于联接有额外的标准(和某些东西) - 正在将其更改为左连接产生相同的结果 - 但更快?
使用LEFT/INNER返回的结果是相同的,左边明显更快......
我们有一个庞大的表,我需要在一行上进行更新.我不知道该行的主键,但我有一个在该表中唯一的varchar值.我还拥有该表中其他一些列的值.
运行更新需要花费三分钟,我假设它正在进行全表扫描.
查看表中的索引,列上的索引的基数为零,页数为零.还有其他索引的基数等于表中的行数(几百万)和几十万的页数.
这些数字究竟意味着什么?
作为一个后续,是否会添加一个限制,以更高的基数或页数来命中索引,从而加快执行速度?或者还有什么我可以看到的指标,找到一个更适合快速找到我要改变的行.
sql-server ×10
sql ×4
t-sql ×4
binary ×1
c# ×1
cardinality ×1
constraints ×1
dataset ×1
dependencies ×1
group-by ×1
indexing ×1
locale ×1
performance ×1
permissions ×1
primary-key ×1
sorting ×1