Sql 我能';我的总数似乎计算不正确

Sql 我能';我的总数似乎计算不正确,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,当我运行下面的查询时 SELECT clientid, CASE WHEN D.ccode = '-1' Then 'Did Not Show' ELSE D.ccode End ccode, ca, ot, bw, cshT, dc, dte, approv FROM dbo.emC D WHERE year(dte) = year(getdate())

当我运行下面的查询时

SELECT clientid, 
       CASE WHEN D.ccode = '-1' Then 'Did Not Show' ELSE D.ccode End ccode,  
       ca, 
       ot, 
       bw, 
       cshT, 
       dc, 
       dte, 
       approv 
  FROM dbo.emC D 
 WHERE year(dte) = year(getdate())
我得到了正确的结果

这是正确的结果,因为当db上的值为“-1”时,ccode显示“未显示”

但是,当我执行UNION ALL以获得每列的总计时,我会得到结果,但是当ccode的valye为“-1”时,“未显示”不再可见

有1000多条记录的值为'-1'

有人能帮忙吗

下面是使用UNION的完整代码

SELECT clientid, 
CASE WHEN D.ccode = '-1' Then 'Did Not Show' ELSE D.ccode End ccode,  
ca, 
ot, 
bw, 
cshT, 
dc, 
dte, 
approv 
FROM dbo.emC D WhERE year(dte) = year(getdate())
UNION ALL   
SELECT 'Total',
 '', 
 SUM(D.ca), 
 SUM(D.ot), 
 SUM(D.bw), 
 SUM(D.cshT),
'',
'',
'' 
  FROM emC D 
 WHERE YEAR(dte)='2011'
我也尝试过使用ROLLUP,但这里真正的问题是,当ccode值为-1时,我无法获取要显示的“未显示”文本

ClientID        CCODE           ot      ca      bw      cshT
019692  CF001           0.00    0.00    1.00    0.00   0.00   
019692  CH503           0.00    0.00    1.00    0.00   0.00
010487  AC407           0.00    0.00    1.00    0.00   0.00
028108  CH540           0.00    0.00    1.00    0.00   0.00
028108  GS925           0.00    0.00    1.00    0.00   0.00
001038  AC428           0.00    0.00    3.00    0.00   0.00
028561  Did Not Show        0.00    0.00    0.00    0.00   0.00
016884  Did Not Show        0.00    0.00    0.00    0.00   0.00
05184   CF001           0.00    0.00    4.50    0.00   0.00

这是因为UNION ALL查询中的每个SQL语句在具有类似数据类型的结果集中必须具有相同数量的字段。引用自MSDN:

以下是组合两组结果集的基本规则 使用UNION进行查询:

  • 在所有查询中,列的数量和顺序必须相同
  • 数据类型必须兼容
现在,您的“未显示”输出更改了列数据类型。尝试在这两个查询中创建一个伪列,并具有两列输出,或者,在未找到大小写时将输出作为数值


编辑:ccode为nvarchar(50)类型。但当您输出“未显示”时,它是文本类型,并且会出现数据类型不匹配。有人可能会想,nvarchar应该能够处理文本,但从技术上讲,它是一种数据类型不匹配,并且会产生这样的运行时问题。或者至少根据我的理解,这是我所知道的。

我解决了这个问题。工会实际上起了作用。唯一的问题是我查询的表是错误的,它没有任何值'-1'


所以,本质上,我是对的,工会与为什么查询不起作用无关。如果我有使用CASE语句所针对的值,它就会工作。

但是数据类型没有改变。ccode为nvarchar(50)。也许,我没有领会你的意思。举个例子就好了。感谢您的时间和帮助。请说明两个查询将输出的列的确切列结构。我已经用示例布局更新了上面的文章。对不起,他们左移了。非常感谢你。我真的非常感谢你的帮助。