Не удалось найти вопрос/ответ, который был совершенно то, что мне нужно, и не мог найти примеры. Я хотел бы использовать функцию окна.TSQL Count Over a Window
У меня есть следующая схема, которая содержит сохраненные проки и таблицу и столбцы, используемые в этих прокамах:
CREATE TABLE [dbo].[ProcedureDependencies](
[DatabaseName] [varchar](256) NOT NULL,
[ProcedureId] [int] NOT NULL,
[ProcedureSchemaName] [varchar](256) NOT NULL,
[ProcedureName] [varchar](256) NOT NULL,
[TableSchemaName] [varchar](256) NOT NULL,
[TableName] [varchar](256) NOT NULL,
[FieldName] [varchar](256) NOT NULL)
Я хочу, чтобы подсчитать количество раз имя таблицы показывает на различных процедур ,
, которые я пытался вариации следующее:
select
DatabaseName,
TableName,
count(tablename) over (partition by DatabaseName,ProcedureName) cnt
from ProcedureDependencies
order by cnt desc
Однако я получаю плохие результаты. Например, в сценарии, которые следуют я хочу ....
databasename tablename cnt
db1 tbl1 3
db1 tbl2 1
db1 tbl3 1
, но я получаю ....
databasename tablename cnt
db1 tbl1 3
db1 tbl2 3
db1 tbl3 3
db1 tbl1 1
Сценарий:
drop table #tmprmd;
create table #tmprmd (
DatabaseName varchar(max),
TableName varchar(max),
ProcedureName varchar(max),
FieldName varchar(max));
Insert Into #tmprmd
Values ('db1', 'tbl1', 'proc1', 'field1'),
('db1', 'tbl1', 'proc1', 'field2'),
('db1', 'tbl2', 'proc1', 'field1'),
('db1', 'tbl1', 'proc2', 'field1'),
('db1', 'tbl3', 'proc1', 'field1'),
('db1', 'tbl1', 'proc3', 'field1');
with
dist as (
select
--distinct
databasename,
procedurename,
tablename
from #tmprmd--ProcedureDependencies
)
select
distinct
DatabaseName,
TableName,
count(tablename) over (partition by DatabaseName,procedurename) cnt
from dist
order by cnt desc
Shoudnt это 4,1,1 желаемых результатов? – Mihai
@Mihai нет, должно быть 3,1,1 – Vasily