Выбор количества строк и количества столбцов с одним запросом sql? - PullRequest
1 голос
/ 21 октября 2011

Как я могу забить как счетчик выбора, так и столбцы выбора одним утверждением?

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

Используя агрегат окна 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>
    )
1 голос
/ 21 октября 2011

Если вы просто хотите посмотреть, в какой «форме» находятся ваши таблицы, что-то вроде этого будет работать. Но если вы хотите узнать количество столбцов / строк для данного запроса, это возможно, но я не знаю, как это сделать

; 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 голосов
/ 21 октября 2011

Я не на 100% то, что вы хотите, но вот возможный пример ...

SELECT
  a,
  b,
  c,
  (SELECT COUNT(*) FROM yourTable) as table_count
FROM
  yourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...