我正在尝试做一个声明,只根据legacy_call_id__c
字段选择不同的记录,但我不知道该怎么做。我收到了一个错误,
Msg 8163,Level 16,State 3,Line 1 text,ntext或image数据 类型不能被选为DISTINCT。“
SELECT DISTINCT Name, CreatedDate, clientId__c, completedDate__c
, Legacy_Call_ID__c, Description_Short__c
FROM Customers.dbo.Incident__c
WHERE Description_Short__c LIKE 'New Hire%'
OR Description_Short__c LIKE 'Term%'
如果这有所不同,我正在使用SQL Server 2008R2。谢谢!
答案 0 :(得分:0)
您的选择查询中可能有text
或ntext
类型的列,distinct
不允许这样。请将列类型更改为varchar(max)
。或者直接在查询
SELECT DISTINCT
Name,
CreatedDate,
clientId__c,
completedDate__c,
Legacy_Call_ID__c,
CAST(Description_Short__c AS VarChar(max)) --Assuming that is the Text/nText column
FROM Customers.dbo.Incident__c
WHERE Description_Short__c LIKE 'New Hire%'
OR Description_Short__c LIKE 'Term%'
修改强>
不完全确定,但这样的事情可能有效:
SELECT
Name,
CreatedDate,
clientId__c,
completedDate__c,
Legacy_Call_ID__c,
Description_Short__c
FROM
Customers.dbo.Incident__c As tblOuter
WHERE
EXISTS(
SELECT
NULL
FROM
Customers.dbo.Incident__c as tblInner
WHERE
(tblInner.Description_Short__c LIKE 'New Hire%' OR
tblInner.Description_Short__c LIKE 'Term%') AND
tblInner.Legacy_Call_ID__c = tblOuter.Legacy_Call_ID__c
GROUP BY
tblInner.Legacy_Call_ID__c
HAVING
MAX(tblInner.CreatedDate) = tblOuter.CreatedDate
)
答案 1 :(得分:0)
由于其格式,您的某个字段无法选择。请尝试使用
CONVERT(nvarchar, Name)
在你的select语句中。 IE->
SELECT DISTINCT CONVERT(nvarchar, Name) as Name, CreatedDate, clientId__c, completedDate__c , Legacy_Call_ID__c, Description_Short__c
FROM Customers.dbo.Incident__c
WHERE Description_Short__c LIKE 'New Hire%'
OR Description_Short__c LIKE 'Term%'
将nvarchar更改为应该是的任何字段。玩它,你最终会得到它。这解决了我的选择问题,如果它解决你的问题,添加代表。
答案 2 :(得分:0)
请参阅下面的查询。在您使用它时,您应该考虑将数据类型永久更改为varchar(max)而不是text。
SELECT DISTINCT Name, CreatedDate, clientId__c, completedDate__c
, Legacy_Call_ID__c, convert(varchar(max), Description_Short__c)
FROM Customers.dbo.Incident__c
WHERE convert(varchar(max), Description_Short__c) LIKE 'New Hire%'
OR convert(varchar(max), Description_Short__c) LIKE 'Term%'
答案 3 :(得分:0)
根据legacy_call_id__c字段选择不同的记录
使用不同的方式将为所有列组合提供不同的值,而不仅仅是legacy_call_id__c
。您可以使用row_number()
函数在一个字段上获取不同的行。在这里,您将获得每个CreateDate
的{{1}}最高值的行。
legacy_call_id__c