簡體   English   中英

使用一個sql查詢選擇Rowcount和列數?

[英]Selecting Rowcount and number of columns with one sql query?

如何使用一個語句將選擇計數和選擇列聯系起來?

使用COUNT()窗口聚合,您應該能夠完成您想要做的事情。 但是,針對非常大的表的DISTINCT不太可能表現出色:

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

另一種選擇是,但你要兩次觸摸桌子:

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

如果你只是想看看你的桌子有什么“形狀”,這樣的東西就可以了。 但是,如果您想知道給定查詢的列/行計數,可能會有可能,但我不知道該怎么做

; 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

我不是100%你想要的,但這是一個可能的例子......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM