标签: sql-server

在Joins中使用Aggregate函数时如何使用Group By子句?

我想加入三个表并计算表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,JobOrderIDDivisionID.

我写了以下查询,它工作正常.但是,如果我删除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 sql-server group-by sql-server-2005 aggregate-functions

7
推荐指数
2
解决办法
5万
查看次数

SQL Server 2005中的varbinary到literal varchar副本

如何从此SQL Server varbinary中获取:

0x63C34D6BCAD555EB64BF7E848D02C376
Run Code Online (Sandbox Code Playgroud)

对这个varchar?

'63C34D6BCAD555EB64BF7E848D02C376'
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server binary sql-server-2005

7
推荐指数
1
解决办法
1638
查看次数

查看链接服务器依赖项sql server 2008

是否有可能知道如何/是否可以查看依赖于Sql Server 2008中链接服务器的所有表/视图/存储过程.基本上好像链接服务器可以访问上下文菜单"查看依赖关系"?

任何帮助非常感谢.

谢谢

sql-server dependencies linked-server

7
推荐指数
2
解决办法
1万
查看次数

SQL Server存储过程和权限

是否可以拒绝SQL Server中所有内容的权限(例如,选择,插入等)并通过存储过程提供临时权限.我想只使用存储过程来访问sql数据库中的数据.

这可能还是有另一种方式?

sql t-sql sql-server permissions

7
推荐指数
2
解决办法
2738
查看次数

SQL Server匹配单词短语和顺序相关性的最佳方法

使用四个不同的唯一条件,通过参数中单词的数量(计数)/匹配对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)

c# sql-server sorting dataset sql-server-2008

7
推荐指数
2
解决办法
4309
查看次数

如何在非英语Windows上为服务帐户创建SQL Server登录?

给定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)

哪个确实有用......

t-sql sql-server locale windows-server-2008-r2

7
推荐指数
2
解决办法
9538
查看次数

信息架构和主键

如何使用主键打印出列的"主键"?

如果表具有主键,而不是带有主键的一列和其他列在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

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

为什么在SQL Server中舍入从float转换为varchar的原因

继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-server floating-point sql-server-2005

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

SQL内部vs左连接问题

我有一个非常糟糕的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返回的结果是相同的,左边明显更快......

sql t-sql sql-server performance sql-server-2005

7
推荐指数
1
解决办法
1034
查看次数

什么是基数以及它如何影响性能(SQL Server)?

我们有一个庞大的表,我需要在一行上进行更新.我不知道该行的主键,但我有一个在该表中唯一的varchar值.我还拥有该表中其他一些列的值.

运行更新需要花费三分钟,我假设它正在进行全表扫描.

查看表中的索引,列上的索引的基数为零,页数为零.还有其他索引的基数等于表中的行数(几百万)和几十万的页数.

这些数字究竟意味着什么?

作为一个后续,是否会添加一个限制,以更高的基数或页数来命中索引,从而加快执行速度?或者还有什么我可以看到的指标,找到一个更适合快速找到我要改变的行.

sql sql-server indexing cardinality

7
推荐指数
1
解决办法
9680
查看次数