2017-04-19 3 views
1

バディDISTINCTクエリが機能しません。出力に繰り返し列が表示されます

私はMSSQLのクエリを1つだけ持っています。このようなものです ...

SELECT DISTINCT resource.locationurl, 
       resource.resourcename, 
       resource.anwserid, 
       checktotal.total 
FROM resource 
     INNER JOIN (SELECT Count(DISTINCT anwserid) AS total, 
          resourcename 
        FROM resource AS Resource_1 
        WHERE (anwserid IN (SELECT Cast(value AS INT) AS Expr1 
             FROM dbo.Udf_split(@sCategoryID, ',') 
               AS 
               udf_Split_1)) 
        GROUP BY resourcename) AS checktotal 
       ON resource.resourcename = checktotal.resourcename 
WHERE (resource.anwserid IN (SELECT Cast(value AS INT) AS Expr1 
           FROM dbo.Udf_split(@sCategoryID, ',') AS 
             udf_Split_1) 
     ) 
     AND (checktotal.total = @Total) 
ORDER BY resource.resourcename 

私はこのクエリを実行しますが、その私にResource.LocationURLの繰り返し列を与えます。

は、あなたはそれが生きて私は私のほとんどを試みるが、今、私は心の外にしていますあなたには、いくつかのカテゴリを選択発射できるが、結果は明瞭ではなかった上記のリンクでhttp://www.ite.org/visionzero/toolbox/default2.aspx

チェック..

を聞く確認してくださいすることができますこれで私を助けてください。

+0

質問に答えるために、我々質問に対する回答も必要です。あなたはどうやって別れているのですか? –

答えて

1

複数の列をフェッチするときの意味は、DISTINCTが誤解しています。

このクエリを実行した場合:あなたはすべての異なる組み合わせを選択している

SELECT DISTINCT col1, col2 FROM table 

を。許容可能な結果は、この例では

value 1_1, value 2_1 
value 1_1, value 2_2, 
value 2_1, value_2_1 

だろう、value 1_1は組み合わせた二つの列が一意である二回表示されますが、。すべての

SELECT resource.locationurl, 
     resource.resourcename, 
     resource.anwserid, 
     Sum(checktotal.total) 
FROM resource 
     INNER JOIN (SELECT Count(DISTINCT anwserid) AS total, 
          resourcename 
        FROM resource AS Resource_1 
        WHERE (anwserid IN (SELECT Cast(value AS INT) AS Expr1 
             FROM dbo.Udf_split(@sCategoryID, ',') 
               AS 
               udf_Split_1)) 
        GROUP BY resourcename) AS checktotal 
       ON resource.resourcename = checktotal.resourcename 
WHERE (resource.anwserid IN (SELECT Cast(value AS INT) AS Expr1 
           FROM dbo.Udf_split(@sCategoryID, ',') AS 
             udf_Split_1) 
     ) 
     AND (checktotal.total = @Total) 
GROUP BY resource.locationurl, 
      resource.resourcename, 
      resource.anwserid 
1

まず、あなたが何もしないリンク先サイト:

私の推測では、あなたが実際にグループ化を実行しようとしているということです。

次に、DISTINCTは一意の行を保証します。すべての列の値を一意にするわけではありません。それについて考えてみてください!それはどのように機能しますか?同じlocationurlフィールドを持つ2つの行がありますが、それ以外の場合はという別の要素があります。どちらを含まないのですか?

最後に、あなたの疑問に気をつけてください。

0

任意のレコードが少なくとも一つのCOL差を持っている場合、私はあなたのクエリは、マルチカラム上DISTINCT選択で見るように、 ので、それはDISTINCT条件

例渡す:

record1 : locationurl | resourcename | anwserid | Sum(checktotal.total) 
      loc1   res1   1    100 
record2 : locationurl | resourcename | anwserid | Sum(checktotal.total) 
      loc1   res1   2    100 
関連する問題