Sql 如何在返回XML时执行Select Distinct
我有一个返回XML的存储过程,现在的问题是我希望它返回不同的ClientID,但当我这样做时。。上面说Sql 如何在返回XML时执行Select Distinct,sql,sql-server-2008,Sql,Sql Server 2008,我有一个返回XML的存储过程,现在的问题是我希望它返回不同的ClientID,但当我这样做时。。上面说 The xml data type cannot be selected as DISTINCT because it is not comparable. 我该怎么做?这是我的问题 SELECT DISTINCT ClientTable.ClientID, ClientTable.ClientAddress, ClientTa
The xml data type cannot be selected as DISTINCT because it is not comparable.
我该怎么做?这是我的问题
SELECT DISTINCT ClientTable.ClientID,
ClientTable.ClientAddress,
ClientTable.RetailStore,
ClientTable.PhoneNumber,
ClientTable.City,
ClientTable.Amount,
(SELECT Rating = IsNull(AVG(Rate), 0),
NumberRates = IsNUll(COUNT(ClientID), 0)
FROM ReviewsTable
WHERE ReviewsTable.ClientID = ClientTable.ClientID
FOR XML PATH(''), TYPE)
FROM ClientTable
INNER JOIN ClientTypes
ON ClientTable.ClientID = ClientTypes.ClientID
WHERE ClientTable.ClientID IN (SELECT myFreeTextTableID
FROM myFreeTextTable
WHERE FREETEXT(*, @Keyword))
OR
ClientTypes.ClientID IN (SELECT myFreeTextTableID
FROM myFreeTextTable
WHERE FREETEXT(*, @Keyword))
ORDER BY ClientTable.Order ASC
FOR XML AUTO, TYPE, ELEMENTS
我甚至不打算复制您的模式或数据,但是这个查询呢
;WITH ft AS
(
SELECT ClientID = myFreeTextTableID
FROM myFreeTextTable WHERE FREETEXT(*, @Keyword)
),
c AS
(
SELECT DISTINCT
c.ClientID,
c.ClientAddress,
c.RetailStore,
c.PhoneNumber,
c.City,
c.Amount,
c.[Order]
FROM dbo.ClientTable AS c
INNER JOIN dbo.ClientTypes AS t
ON c.ClientID = t.ClientID
WHERE EXISTS
(
SELECT 1 FROM ft
WHERE ClientID IN (c.ClientID, t.ClientID)
)
)
SELECT
c.ClientID,
c.ClientAddress,
c.RetailStore,
c.PhoneNumber,
c.City,
c.Amount,
Rating = (SELECT COALESCE(AVG(Rate), 0),
NumberRates = COALESCE(COUNT(ClientID), 0)
FROM ReviewsTable
WHERE ReviewsTable.ClientID = c.ClientID
FOR XML PATH(''), TYPE)
FROM c
ORDER BY c.[Order]
FOR XML AUTO, TYPE, ELEMENTS;
为什么需要
不同的?您正在从ClientTable
中进行选择。您的表关系是什么?使用DISTINCT
可能是获取唯一列表的低效方法。最好是找到你有一对多关系的地方,然后在那个地方把它们删减到只有一对一的关系。例如,为什么在ClientTable.ClientID=ClientTypes.ClientID上有内部联接ClientTypes?您似乎没有在结果中使用任何ClientType
列。你真的需要加入吗?哦,对不起,我错过了一部分。。。以上已更正,因此我正在两个表中查找关键字。。但是两个表中都可以有相同的客户机。。所以它会回来两次但我想要一次。。我无法修改架构。。如何选择不同的ClientID?