Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-计算列中的差异_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL-计算列中的差异

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

我有点进退两难

在我的数据库中,我有包含

“13NR0123-0001、13NR0123-0002….”

还有其他没有的盒子号码

“13NR0456”

原因是什么

-0001,-0002

这些盒子里有潜艇,而另一个没有潜艇

我试图确定我的数据库中有多少个框,我为每个变量编写了两个脚本,但没有给出正确的答案

以下是子框的报告

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他纠正了我的回答