text,ntext和image数据类型无法进行比较或排序

时间:2014-02-04 15:29:32

标签: sql sql-server

SQL Server显示如果field1为null然后是field2,如果field1和field2为null然后是field3,如果field1,field2,field3为null则为field4如果所有4个字段为null则为NULL如何在SQL Server中显示?我假设可能是一个案例陈述,并在等情况下做案件,但我对此感到迷失。

编辑 - 我尝试运行像建议的直接COALESCE功能,我收到一个错误 除非使用IS NULL或LIKE运算符,否则无法比较或排序text,ntext和image数据类型。

Select
Count(SoldNum),
Coalesce(Store1, Store2, Store3, Store4) As Store_Item_Sold_From
ItemSoldBy
ItemSold
FROM salesDatabase
Where Sold Is not null
Group By ItemSoldBy, ItemSold, Coalesce(Store1, Store2, Store3, Store4)

5 个答案:

答案 0 :(得分:4)

您正在寻找COALESCE运营商

SELECT COALESCE(field1, field2, field3, field4)

答案 1 :(得分:1)

您正在寻找coalesce功能

SELECT COALESCE(field1, field2, field3, field4) FROM Table

如果所有四个字段都为null,那么您的最终结果将为null。除非您当然要添加默认值:

SELECT COALESCE(field1, field2, field3, field4, 'Not Found') FROM Table

答案 2 :(得分:1)

请勿使用text。使用varchar

问题不在于COALESCE(),而是因为按文本(或图像)字段进行分组。

DECLARE @t TABLE (a text)
SELECT a FROM @t GROUP BY a

Msg 306, Level 16, State 2, Line 3
The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

Text / ntext / image类型不能像数字或varchar那样排序。如果你有一堆书,你不会把“Fahrenheit 451”放在“The Bell Jar”旁边,因为他们的第一句话是“这是一个......”和“这是一个......”。您不会按第一个像素的颜色对图像进行排序。使用text / image字段来保存图书/图片的内容和varchar字段来保存标题。然后按标题排序。

答案 3 :(得分:0)

COALESCE按顺序计算参数,并返回最初未评估为NULL的第一个表达式的当前值。

SELECT COALESCE(field1, field2, field3, field4) FROM yourtable

COALESCE

或者您可以使用CASE声明

SELECT CASE WHEN field1 IS NULL THEN Field2
            WHEN Field1 IS NULL AND Field2 IS NULL Then Field3
            WHEN Field1 IS NULL AND Field2 IS NULL AND Field3 IS NULL Then Field4
            ELSE 'NIL'
            END

答案 4 :(得分:0)

据我所知,COALESCE不适用于这种情况,因为排序是在ntext或text字段中,它们可能为null或不为null。

我认为你能做的就是这样的CASE声明:

SELECT  CASE WHEN CONVERT(NVARCHAR(MAX),Field1) IS NULL THEN CONVERT(NVARCHAR(MAX),Field2)
WHEN CONVERT(NVARCHAR(MAX),Field1) IS NULL AND CONVERT(NVARCHAR(MAX),Field2) THEN CONVERT(NVARCHAR(MAX),Field3)
WHEN CONVERT(NVARCHAR(MAX),Field1) IS NULL AND CONVERT(NVARCHAR(MAX),Field2) AND CONVERT(NVARCHAR(MAX),Field3) THEN CONVERT(NVARCHAR(MAX),Field4)
WHEN CONVERT(NVARCHAR(MAX),Field4) IS NULL THEN Field4 END
    FROM YOURTABLE  

注意:您可以根据具体情况使用数据类型,也可以更改条件ANDOR运算符