我试图将几个字段的组合显示为一个。 (客户要求我这样做)。我尝试了以下命令但是我得到了上述错误:
SQL片段:
SELECT dbo.VPayment_2.Serial, dbo.VPayment_1.Description, dbo.VPayment_2.Money, dbo.VPayment_1.PaymentType,,
'Payment ' + dbo.VPayment_1.PaymentType + ' - ' + ' Serial ' + CAST(dbo.VPayment_2.Serial AS nvarchar(15))
+ '(' + dbo.VPayment_1.Description + ')' AS Compact Info
FROM dbo.VPayment_2 INNER JOIN
dbo.VPayment_1 ON dbo.VPayment_2.ID = dbo.VPayment_1.ID
最终结果如下:
---------------------------------------------------------------------------
Serial Description Money PaymentType Compact Info
123456 some info 500$ Check Payment :Check - Serial 123456 - some info
0 some info2 100$ In Cash Payment :In Cash - Serial 0 - some info
为了达到这个目的,我在相关表格中创建了两个视图,然后使用ID我内部加入了这两个视图,以便获得观察结果。问题是当我添加Compact Info字段时,它是其他字段的组合,它会生成错误:
无法解决select语句中第5列的排序规则冲突
当我没有比较任何事情时会发生这种情况。
答案 0 :(得分:13)
听起来像dbo.VPayment_1.PaymentType
和dbo.VPayment_2.Serial
具有不同的排序规则(这不仅仅是在你进行比较时发生,而且当你结合,连接时也是如此)。
有几个修复:
更改一个视图或两者以对这些列使用相同的排序规则。您可以通过更改基础列或在视图的COLLATE
列表中指定SELECT
子句来完成此操作,例如
SELECT PaymentType COLLATE Latin1_General_CI_AI
... FROM ...
在您的查询中明确整理,例如
... 'Payment ' + dbo.VPayment_1.PaymentType COLLATE Latin1_General_CI_AI
+ ' - ' + ' Serial ' + CAST(dbo.VPayment_2.Serial COLLATE Latin1_General_CI_AI
AS nvarchar(15))
最好的解决方案是纠正所有字符串列以使用相同的排序规则。我遇到过许多案例,人们在不同的表格,数据库或服务器中使用不同的排序规则,并且还没有得到有效的解释 - 大部分时间他们都不知道为什么排序规则不同。