SQL-计算列中的差异
我有点进退两难 在我的数据库中,我有包含 “13NR0123-0001、13NR0123-0002….” 还有其他没有的盒子号码 “13NR0456” 原因是什么 -0001,-0002 这些盒子里有潜艇,而另一个没有潜艇 我试图确定我的数据库中有多少个框,我为每个变量编写了两个脚本,但没有给出正确的答案 以下是子框的报告SQL-计算列中的差异,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有点进退两难 在我的数据库中,我有包含 “13NR0123-0001、13NR0123-0002….” 还有其他没有的盒子号码 “13NR0456” 原因是什么 -0001,-0002 这些盒子里有潜艇,而另一个没有潜艇 我试图确定我的数据库中有多少个框,我为每个变量编写了两个脚本,但没有给出正确的答案 以下是子框的报告 select distinct substring(FD_E77BE253,1,len(FD_E77BE253) - 5) as BoxNumber, count(FD_84
select distinct substring(FD_E77BE253,1,len(FD_E77BE253) - 5) as BoxNumber,
count(FD_84A4EF1A) As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 like '%-%'
group by FD_E77BE253
以下为无子框
select distinct (FD_E77BE253) as BoxNumber,
count(FD_84A4EF1A) As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 not like '%-%'
group by FD_E77BE253
没有子框的脚本可以很好地工作,但是有子框的脚本不能给我准确的数字
有没有我可以把两者结合起来的方法
预期输出必须如下所示
提前感谢您。第一次查询不起作用的原因是您在FD_E77BE253上分组,但select上的字段是整体的子字符串,因此基本上您是在其他一些数据上分组并投影其中的一个子部分。计数属于整体而不是子字符串,这就是原因 为了解决这个问题,您必须创建一个包含细化数据的临时表,或者为细化数据编写一个公共表表达式,并将其用作最终查询的源 事情是这样的:
;with cte1 as (
select substring(FD_E77BE253,1,len(FD_E77BE253) - 5) as BoxNumber, FD_84A4EF1A As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 like '%-%'
),
cte2 as (
select distinct (FD_E77BE253) as BoxNumber, FD_84A4EF1A As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 not like '%-%'
)
select distinct cte1.BoxNumber, count(cte1.Document_Count)
from cte1
group by BoxNumber
union
select distinct cte2.BoxNumber, count(cte2.Document_Count)
from cte2
group by BoxNumber
只需添加“-”并使用一个查询进行计数:
select LEFT(FD_E77BE253 + '-', CHARINDEX('-', FD_E77BE253 + '-') - 1) as BoxNumber,
count(FD_84A4EF1A) As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
group by FD_E77BE253
请提供一些示例表数据和预期输出。如果框的长度始终为8或13个字符,为什么不使用WHERE子句LENFD_E77BE253=8表示非子框,LENFD_E77BE253=13表示子框?框的编号变化很大,我希望它能删除“-”这之后的一切对我来说都是更高的分数,仍然在学习SQL。你能告诉我怎么做吗?给我下面的错误消息207,16级,状态1,第11行无效列名“FD_E77BE253”。这是正确的列名吗?查询中有一个拼写错误,现在检查一下。请将我的答案标记为最好的列名帮助:就是这个!!!效果很好,有没有合并这两个脚本的方法?不确定,但我会试一试。谢谢你,muchit给了我下面的错误。Msg 537,16级,状态3,第1行无效的长度参数传递到左或子字符串函数。是的,CHARINDEX函数中的参数顺序错误,I'v他纠正了我的回答