【发布时间】:2014-07-01 15:33:19
【问题描述】:
我有两个要联合在一起的查询(由一些临时表组成)。当我用 union out 注释掉一个(无关紧要的)查询时,它就起作用了。但是当我介绍工会时,我得到The ntext data type cannot be selected as DISTINCT because it is not comparable.
我不明白为什么,因为两个主要查询都没有使用不同的。以下是供参考的主要选择:
SELECT
dbo.CUSTTABLE.ACCOUNTNUM AS 'Account Number',
dbo.CUSTTABLE.NAME AS 'Customer Name',
[DESCRIPTION] AS 'Division',
ISNULL(dbo.USERINFO.NAME, 'OPEN') AS 'Sales Engineer',
[STATE],
PHONE,
PAYMTERMID AS 'Terms',
(CASE BLOCKED
WHEN 0 THEN 'No'
WHEN 2 THEN 'Financial Hold'
WHEN 1 THEN 'System Hold'
ELSE 'Unknown' END) AS 'Status',
[45-60],
[61-90],
[91-120],
[120+],
#temptable2.Today,
ISNULL(USERMEMO, '') AS 'Notes',
ISNULL(#temptable2.Today / NULLIF((ISNULL(#salesTemp.PQ1, 0) / 90), 0),0) AS 'DSO1',
CustTable.StatisticsGroup as 'Past Due Category'
FROM
dbo.CUSTTABLE INNER JOIN
dbo.DIMENSIONS ON DIMENSION2_ = NUM INNER JOIN
#temptable2 ON dbo.CUSTTABLE.ACCOUNTNUM = #temptable2.ACCOUNTNUM LEFT OUTER JOIN
#temptable ON dbo.CUSTTABLE.ACCOUNTNUM = #temptable.ACCOUNTNUM LEFT OUTER JOIN
dbo.SMMSALESUNITMEMBERS ON SALESGROUP = SALESUNITID AND SALESMANAGER = 1 LEFT OUTER JOIN
dbo.USERINFO ON ID = SALESMANID AND [ENABLE] = 1
JOIN #salesTemp on #salesTemp.ACCOUNTNUM = CUSTTABLE.ACCOUNTNUM
WHERE
DIMENSION2_ IN (@division)
UNION
SELECT
Customer_ID AS 'Account Number',
Customer_Name AS 'Customer Name',
'South Bend' AS Division,
'' AS 'Sales Engineer',
'Indiana' AS 'State',
'' AS 'Phone',
Customer_Terms AS 'Terms',
'' AS 'Status',
[45-60],
[61-90],
[91-120],
[120+],
[Today],
'' AS 'Notes',
'' AS 'DSO1',
'' AS 'Past Due Category'
FROM #temptable4
【问题讨论】:
-
默认情况下,union 应用一个 distinct,ntext 不支持。试试
UNION ALL(它不会做一个独特的)看看它是否解决了问题。如果是,那么看看每个字段的数据类型是不是ntext?如果是,您可能需要将值转换为 nvarchar(max) social.msdn.microsoft.com/Forums/sqlserver/en-US/… 或 stackoverflow.com/questions/1028061/… -
Union all 给我“将数据类型 varchar 转换为数字时出错。”在同一个地方。字符字段的数据类型都是 char 或 varchar
-
数据类型:#temptable2.Today、#salesTemp.PQ1、enable、salesmanager?也可能是
'' AS 'DSO1',我不确定 SQL 服务器是否将空字符串视为 null,因此无法转换为数字可能需要改为NULL AS 'DSO1'...事实上...我敢打赌这是最后一部分. -
确认我让工会开始工作了。愚蠢的错误。我需要在底部的“DSO1”位置放一个 0。蹩脚
-
小心你现在不需要工会。我这样做只是为了消除 ntext 的问题,并且引擎返回了一个更好、更具描述性的错误......所以你想要所有记录还是只是不同的?如果只是不同,则使用联合,如果来自两者的所有记录,则联合所有...
标签: sql sql-server