1

〜150列のテーブルがあります。各列を見つけたいのcount(distinct(colName))ですが、実際に各列名を入力せずにそうする方法があるかどうか疑問に思っています。

理想的には使用しますcount(distinct(*))が、これは機能しません。

他の提案はありますか?

編集:

これが私のテーブルの場合:

  id         col1         col2        col3      ...
  01         10001       west         north  
  02         10001       west         south  
  03         10002       east         south  
  04         10002       west         north  
  05         10001       east         south  
  06         10003       west         north 

この出力を探しています

count(distinct(id))   count(distinct(col1))    count(distinct(col2))   count(distinct(col3))
       6                       3                    2                      2
4

5 に答える 5

5

あなたはこれを行うことができます:

DECLARE @query varchar(max)
    SELECT @query = 
    'SELECT ' + SUBSTRING((SELECT ',' +'COUNT(DISTINCT(' + column_name + ')) 
             As ' + column_name + ' '  
             FROM information_schema.columns
             WHERE 
             table_name = 'table_name'
             for xml path('')),2,200000)  +  'FROM table_name'

PRINT(@query)
于 2012-09-27T16:29:26.947 に答える
2

次のスクリプトを使用して、テーブル内の各列の個別の数を返す T-SQL クエリを作成します。@Table値をテーブル名に置き換えます。

DECLARE @Table SYSNAME = 'TableName'; 

-- REVERSE and STUFF used to remove trailing UNION in string
SELECT REVERSE(STUFF(REVERSE((SELECT 'SELECT ''' + name 
                                     + ''' AS [Column], COUNT(DISTINCT(' 
                                     + QUOTENAME(name) + ')) AS [Count] FROM ' 
                                     + QUOTENAME(@Table) + ' UNION ' 
                              -- get column name from sys.columns  
                              FROM   sys.columns 
                              WHERE  object_id = Object_id(@Table)
                              -- concatenate result strings with FOR XML PATH
                              FOR XML PATH (''))), 1, 7, ';'));
于 2012-09-27T16:38:22.360 に答える
0

これがMySQLだけで可能だとは思いません。希望する結果を得るには、サーバー側の言語を使用する必要があると思います。

最初のクエリとして「DESCTABLE」を使用し、次に「フィールド」行ごとにクエリをコンパイルします。


これを無視してください、間違ったシステムタグ:)

于 2012-09-27T16:19:12.907 に答える
-1

これは次のことを行う必要があります。

select count(*) from (select distinct * from myTable) as t

これがSQL Fiddleテストです。

create table Data
(
    Id int,
    Data varchar(50)
)

insert into Data 
select 1, 'ABC'
union all
select 1, 'ABC'

select count(*) 
from (select distinct * from Data) as t
于 2012-09-27T16:24:04.593 に答える