Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql动态获取计数和总行数_Sql Server_Tsql - Fatal编程技术网

Sql server Sql动态获取计数和总行数

Sql server Sql动态获取计数和总行数,sql-server,tsql,Sql Server,Tsql,我有两张桌子如下 NameId Name 11 Ancillary 22 Reviews 33 Audit 44 Logging id NameId CountyId 51 11 1 52 11 1 53 11 2 54 22 2 55 22 3 56 33 3 57

我有两张桌子如下

NameId      Name 
11       Ancillary
22       Reviews
33       Audit
44       Logging

id      NameId    CountyId
51       11       1
52       11       1
53       11       2
54       22       2
55       22       3
56       33       3
57       33       3
结果应为与县关联的名称总数,如下所示。Nameid是否可以是动态的?如果有4个以上的名称,则查询应该能够自动显示计数,而无需硬编码行名称。最后还计算每行的总计

CountyId AncillaryCount   ReviewsCount  AuditCount    LoggingCount   Total   
1           2             0             0               0               2
2           1             1             0               0               2
3           0             1             2               0               3

搜索“DynamicPivotSQL”,应该有一组结果。如果它实际上不需要是动态的(例如,你只有4个不同的答案,你实际上需要计数),你可以只做一个常规的透视(或案例聚合)。可能重复一个纯代码答案不是一个好答案。解释这是做什么的,为什么它会成为OP的问题。这对OP没有帮助,对其他可能有类似问题的人也没有帮助。问答网站也是如此,而不是讨论论坛。您正在使用第二快的方法聚合名称。然后您将创建一个PIVOT状态。临时桌子怎么了?这不是PIVOT的工作吗?@PanagiotisKanavos作为一名开发人员,在我看来,我编写了代码,如果您认为您可以给出更好的答案,但不要批评其他人,请特别检查SO教程和指南。仅代码答案被视为低质量,并自动标记以供审查。这
IF OBJECT_ID('Tempdb..#Temp') IS NOT NULL
Drop table #Temp

DECLARE @TabA Table (NameId INT,Name Varchar(100))
INSERT INTO @TabA
SELECT 11,'Ancillary' Union all
SELECT 22,'Reviews'   Union all
SELECT 33,'Audit'     Union all
SELECT 44,'Logging'

DECLARE @TabB Table (id INT, NameId INT,CountyId INT)
INSERT INTO @TabB
SELECT 51,11,1 UNION ALL
SELECT 52,11,1 UNION ALL
SELECT 53,11,2 UNION ALL
SELECT 54,22,2 UNION ALL
SELECT 55,22,3 UNION ALL
SELECT 56,33,3 UNION ALL
SELECT 57,33,3 UNION ALL
SELECT 57,44,3 

SELECT B.CountyId,
A.Name, 
COUNT(A.Name) Over(Partition by B.CountyId,A.Name Order by B.CountyId) AS CountName 
INTO #Temp from @TabA A
LEFT join @TabB B
On b.NameId=a.NameId


DECLARE @Coulmn nvarchar(max),
        @Coulmn2 nvarchar(max),
        @SumCoulmn nvarchar(max),
        @Sql nvarchar(max)

SELECT @Coulmn=STUFF((SELECT DISTINCT ', '+ '['+ Name +']' From #Temp
FOR XML PATH ('')),1,1,'')

SELECT @SumCoulmn=STUFF((SELECT DISTINCT ', '+ + Name +'Count' From #Temp
FOR XML PATH ('')),1,1,'')
SET @SumCoulmn= '('+REPLACE(@SumCoulmn,',',' + ')+')'

SELECT @Coulmn2=STUFF((SELECT DISTINCT ', '+ 'ISNULL(' + Name + ',''0'')' +' AS  ['+Name +'Count]' From #Temp
FOR XML PATH ('')),1,1,'')

SET @Sql='SELECT *,'+@SumCoulmn+ ' AS Total From 
            (  
          SELECT CountyId,'+@Coulmn2+ ' From 
            (
            SELECT * From #Temp
            )As Src
            PIVOT
            (
            MAX(CountName) FOR Name IN ('+ @Coulmn +')
            )Pvt
            )Dt
            '
Print @Sql
Exec(@Sql)