3

特定の問題を解決しようとして数時間座っていましたが、解決できませんでした。最終的に、ここに投稿することにしました。ここにいくつかの記録があります、

╔════════╦════════════╦═════════╦══════════════════╗
║ AUTOID ║ PERSONNAME ║ FLOWER  ║ Other columns... ║
╠════════╬════════════╬═════════╬══════════════════╣
║      1 ║ Alex       ║ Rose    ║                  ║
║      2 ║ Rene       ║ Rose    ║                  ║
║      3 ║ Rene       ║ Jasmin  ║                  ║
║      4 ║ Darwin     ║ Rose    ║                  ║
║      5 ║ Alex       ║ Rose    ║                  ║
║      6 ║ Darwin     ║ Jasmin  ║                  ║
║      7 ║ Alex       ║ Rose    ║                  ║
║      8 ║ Rene       ║ Jasmin  ║                  ║
║      9 ║ Hello      ║ World   ║                  ║
║     10 ║ Hello      ║ World   ║                  ║
╚════════╩════════════╩═════════╩══════════════════╝

すべての記録に 1 種類の花しかない人が、この結果を得るにはどうすればよいでしょうか。

╔════════════╦════════════╗
║ PERSONNAME ║ FLOWERNAME ║
╠════════════╬════════════╣
║ Alex       ║ Rose       ║
║ Hello      ║ World      ║
╚════════════╩════════════╝

私が試した最良のものは、以下のこのクエリでしたが、まだ機能していません。

SELECT  DISTINCT t1.PersonName, t1.Flower
FROM    TableName t1 
        INNER JOIN
        (
            SELECT  personname, COUNT(DISTINCT flower) totals
            FROM    tableName
            GROUP   BY personname, Flower
        )  t2 ON t1.personname = t2.personname and
                    t2.totals = 1

何か案が?

4

2 に答える 2

4

GROUP BY句、HAVING句を使用できますCOUNT()。この問題では、サブクエリに参加する必要はありません

SELECT  PersonName, MAX(Flower) flowerName
FROM    TableName
GROUP   BY PersonName
HAVING  COUNT(DISTINCT Flower) = 1
于 2013-02-01T17:29:15.977 に答える
0

または、猫の皮を剥ぐ方法は常に複数あるため...

SELECT x.*
  FROM tablename x
  LEFT
  JOIN tablename y
    ON y.personname = x.personname
   AND ((y.flower <> x.flower)
    OR  (y.flower = x.flower AND y.autoid < x.autoid))
 WHERE y.autoid IS NULL;
于 2013-02-01T18:15:07.490 に答える