Рассчитать значения записей разных столбцов для всех столбцов, не обращаясь к таблице более одного раза, используя T- SQL, C# или Python? - PullRequest
1 голос
/ 01 мая 2020

У меня есть таблица в SQL Сервер, который имеет 50 столбцов и 200 миллионов записей. В настоящее время я нажимаю на эту таблицу 50 раз, чтобы рассчитывать на разные значения столбцов для всех столбцов, как показано ниже:

INSERT INTO dbo.RPTS_LoadValues
(
    Column_Value,
    Record_Value,
    Record_Ct
)
SELECT 'Transaction_Dt',
       CONVERT(VARCHAR(50), Transaction_Dt),
       COUNT_BIG(1)
FROM dbo.VehicleImport
GROUP BY Transaction_Dt
UNION ALL
SELECT 'Purchase_Dt',
       CONVERT(VARCHAR(50), Purchase_Dt),
       COUNT_BIG(1)
FROM dbo.VehicleImport
GROUP BY Purchase_Dt
UNION ALL
SELECT 'PurchaseType_Cd',
       CONVERT(VARCHAR(50), PurchaseType_Cd),
       COUNT_BIG(1)
FROM dbo.VehicleImport
GROUP BY PurchaseType_Cd;

Выше выполнения запроса для 3 столбцов, а именно Transaction_Dt, Purchase_Dt и PurchaseType_Cd, есть другие 47 столбцов как Car_Type, Model_Ds, Model_Year et c.

Есть ли какой-либо другой способ, используя T- SQL, C# или Python, чтобы я попал в таблицу только один раз и мог рассчитывать на разные столбцы записать значения для всех столбцов? Пожалуйста, предоставьте полезные ресурсы или ссылки, которые могут помочь.

1 Ответ

0 голосов
/ 01 мая 2020

--.... для 200 мил?

select colname, colvalue, count(*) as thecounter
from
(
select 
    r.col.value('./@colname[1]', 'nvarchar(128)') as colname,
    r.col.value('./@colvalue[1]', 'nvarchar(max)') as colvalue
from
(
select  
   (
   select
    'object_id' as 'col/@colname', object_id as 'col/@colvalue', '', --column name, column value, ''
    'name' as 'col/@colname', name as 'col/@colvalue', '',
    'column_id' as 'col/@colname', column_id as 'col/@colvalue', '',
    'system_type_id' as 'col/@colname', column_id as 'col/@colvalue', '',
    'user_type_id' as 'col/@colname', user_type_id as 'col/@colvalue', '',
    'collation_name' as 'col/@colname', collation_name as 'col/@colvalue', '',
    'is_sparse' as 'col/@colname', is_sparse as 'col/@colvalue', '',
    'is_column_set' as 'col/@colname', is_column_set as 'col/@colvalue'
   for xml path(''), type
   ) as thexml
from sys.all_columns as t --table goes here
) as src
cross apply src.thexml.nodes('./col') as r(col)
) as d
group by d.colname, d.colvalue;

--verify counters
select * --thecounter=3, 3 rows
from sys.all_columns
where name = 'NodeName'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...