-1

2 列の TOP 1 文字列が必要です。値は、出現回数と名前の降順で並べ替えて返される必要があります。これは SQL-Server にあります。

テーブルの例を次に示します。

------------------------------
|   Column1    |   Column2   |
------------------------------
|     John     |   Michael   |
------------------------------
|    Thomas    |    John     |
------------------------------
|    Martin    |    Rick     |
------------------------------
|    David     |   Thomas    |
------------------------------
|     John     |   Martin    |
------------------------------

結果の注文は次のようになります。

----------------------------
|   Column1    |   COUNT   |
----------------------------
|     John     |     3     |
----------------------------
|    Martin    |     2     |
----------------------------
|    Thomas    |     2     |
----------------------------
|     David    |     1     |
----------------------------
|    Michael   |     1     |
----------------------------
|     Rick     |     1     |
----------------------------

結果は次のようになります。

----------------------------
|   Column1    |   COUNT   |
----------------------------
|     John     |     3     |
----------------------------
4

3 に答える 3

3
select top 1 c, count(*) [Count]
from
(
   select column1 c
     from ATable
   union all
   select column2
     from ATable
) a
group by c
order by count(*) desc

最も使用されている名前を取得し、その中からアルファベット順に最初に選択するには:

select top 1 c, count(*) [Count]
from
(
   select column1 c
     from ATable
   union all
   select column2
     from ATable
) a
group by c
order by count(*) desc, c

同じことをしたいが、1列だけでしたい場合:

select top 1 column1, count(*) [Count]
  from ATable
group by column1
order by count(*) desc, column1
于 2012-04-16T12:35:17.553 に答える
2

SQL 2005以降、 UNPIVOTを使用できます。

-- Example Data
DECLARE @Data TABLE (Column1 VARCHAR(10), Column2 VARCHAR(10))
INSERT @Data VALUES ('A', 'B'), ('B', 'A'), ('C', 'A'), ('D', 'E'), ('A', 'D')

SELECT TOP 1 Name, COUNT(*)
FROM @Data d
    UNPIVOT (Name FOR Col IN (Column1, Column2)) AS unpvt
GROUP BY Name
ORDER BY COUNT(*) DESC
于 2012-04-16T12:39:25.370 に答える
0
CREATE TABLE #t (Column1 nvarchar(50), Column2 nvarchar(50))
INSERT INTO #t (Column1, Column2)
VALUES ('John', 'Michael')
,('Thomas', 'John')
,('Martin', 'Rick')
,('David', 'Thomas')
,('John', 'Martin')



;WITH cte (Column1)
AS
(
    SELECT Column1
    FROM #t

    UNION ALL

    SELECT Column2
    FROM #t
)



SELECT TOP 1
        Column1
        ,COUNT(*) as [COUNT]
FROM cte
GROUP BY Column1
ORDER BY [COUNT] DESC
于 2012-04-16T12:35:26.443 に答える