2011-10-21 6 views
1

select countとselect columnsの両方を1つのステートメントでまとめるにはどうすればよいですか?1つのSQLクエリで行数と列数を選択していますか?

+0

は、あなたの質問に展開する必要があります。列の数はどういう意味ですか?通常のSELECT文では、あなたは明示的に列を提供します... –

+0

@ElRonnoco私は質問を編集しました...念のためにそれを見てください。 – Satya

+0

あなたはクエリ文を表示する必要があります。これは少なくとも私にとってはまだ分かりません。 – Yuck

答えて

1

あなたのテーブルがどのような形をしているのか見たいのであれば、このようなものが使えます。あなたが特定のクエリの列/行数を知りたいしている場合しかし、それは可能かもしれないが、私は

; WITH ROW_COUNTS AS 
(
SELECT 
    s.[Name] as [SchemaName] 
, t.[name] as [TableName] 
, SUM(p.rows) as [RowCounts] 
FROM 
    sys.schemas s 
    LEFT JOIN 
     sys.tables t 
     ON s.schema_id = t.schema_id 
    LEFT JOIN 
     sys.partitions p 
     ON t.object_id = p.object_id 
    LEFT JOIN 
     sys.allocation_units a 
     ON p.partition_id = a.container_id 
WHERE 
    p.index_id in(0,1) -- 0 heap table , 1 table with clustered index 
    AND p.rows is not null 
    AND a.type = 1 -- row-data only , not LOB 
GROUP BY 
    s.[Name] 
, t.[name] 
) 
, COLUMN_COUNTS AS 
(
SELECT 
    s.[Name] as [SchemaName] 
, t.[name] as [TableName] 
, COUNT(c.column_id) as [ColumnCounts] 
FROM 
    sys.schemas s 
    INNER JOIN 
     sys.tables t 
     ON s.schema_id = t.schema_id 
    INNER JOIN 
     sys.columns c 
     ON C.object_id = T.object_id 
GROUP BY 
    s.[Name] 
, t.[name] 
) 
SELECT 
    CC.SchemaName 
, CC.TableName 
, RC.RowCounts 
, CC.ColumnCounts 
FROM 
    COLUMN_COUNTS CC 
    INNER JOIN 
     ROW_COUNTS RC 
     ON RC.SchemaName = CC.SchemaName 
     AND RC.TableName = CC.TableName 
ORDER BY 
    1,2 

結果がマスター

SchemaName TableName    RowCounts ColumnCounts 
dbo   Hold_Cluster_Status  0   10 
dbo   MSreplication_options 3   6 
dbo   spt_fallback_db   0   8 
dbo   spt_fallback_dev  0   10 
dbo   spt_fallback_usg  0   9 
dbo   spt_monitor    1   11 
dbo   spt_values    2506  6 
0

Iに対して実行どのように行うのか分かりません「は、あなたがあなたの探しているものを達成することができるはずですCOUNT()ウィンドウ集計を使用して

SELECT 
    a, 
    b, 
    c, 
    (SELECT COUNT(*) FROM yourTable) as table_count 
FROM 
    yourTable 
2

...あなたが望むものではない100%のUREをM、しかし、ここで可能な例です。

SELECT DISTINCT a, b, c, COUNT(*) OVER (PARTITION BY 1) FROM <tablename>; 

別のオプションは次のようになりますが、あなたは二回表に触れている:しかし、非常に大きなテーブルに対してDISTINCTは非常にパフォーマンスになりそうではありません

SELECT a,b,c, MyCount 
FROM <tablename> 
CROSS JOIN 
    (SELECT COUNT(*) AS MyCount 
    FROM <tablename> 
    ) 
+1

BTW: 'COUNT(*)OVER()'と同じ効果があります。 –

関連する問題