Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在返回XML时执行Select Distinct_Sql_Sql Server 2008 - Fatal编程技术网

Sql 如何在返回XML时执行Select Distinct

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

我有一个返回XML的存储过程,现在的问题是我希望它返回不同的ClientID,但当我这样做时。。上面说

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?