Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
MsSql";分组方式;结果表设计_Sql_Sql Server - Fatal编程技术网

MsSql";分组方式;结果表设计

MsSql";分组方式;结果表设计,sql,sql-server,Sql,Sql Server,如何将结果1转换为结果2。我无法使用透视表获取结果2 Result1 Result1查询 结果2 SQL没有其他的功能,比如PIVOT,正如您所发现的,您需要提前知道这些值 这种格式化通常在系统的输出部分完成,例如报表引擎。例如,ssr可以很好地处理这个问题&开箱即用 您需要使用动态SQL来实现堆栈中较低的位置。尝试使用此动态SQL IF OBJECT_ID('tempdb..#Temp') IS NOT NULL DROP TABLE #Temp CREATE TABLE #Temp([Co

如何将结果1转换为结果2。我无法使用透视表获取结果2

Result1

Result1查询

结果2


SQL没有其他的功能,比如
PIVOT
,正如您所发现的,您需要提前知道这些值

这种格式化通常在系统的输出部分完成,例如报表引擎。例如,ssr可以很好地处理这个问题&开箱即用

您需要使用动态SQL来实现堆栈中较低的位置。

尝试使用此动态SQL

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Temp([Country] VARCHAR(20),[City] VARCHAR(20),[Count] INT)
INSERT INTO #Temp
SELECT 'Germany'    ,'Aachen'    ,1  UNION ALL
SELECT 'USA'        ,'Albuquerque',1 UNION ALL
SELECT 'USA'        ,'Anchorage'     ,1  UNION ALL
SELECT 'Denmark'    ,'Arhus'         ,1  UNION ALL
SELECT 'Spain'      ,'Barcelone'  ,1

DECLARE @Colmn nvarchar(max),
        @Sql nvarchar(max)

SELECT @Colmn=STUFF((SELECT distinct ', '+QUOTENAME([Country]) FROM #Temp
                FOR XML PATH ('')),1,1,'') 

SET @Sql =' SELECT Cityynames ,'+ @Colmn +' FROM
(
SELECT  *,Country AS Countrynames,City AS Cityynames
FROM #Temp
)dt
PIVOT 
(
MAX([Count]) FOR [Country] IN ('+@Colmn+')
) AS Pvt'
PRINT @Sql
EXEC (@Sql)

你用哪一种?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加一个“
postgresql
oracle
sqlserver
db2
,…您是否尝试过@ADyson是的,我尝试过。但是我不能用这条线。您知道如何选择所有列吗
对于([第一个数据透视列]、[第二个数据透视列]、…[最后一个数据透视列])中的[]请编辑问题,向我们展示您的尝试,并解释您会出现什么错误/意外行为。我们无法修复我们看不到的代码。@Denizogul正如我提到的,将来如果您有更新,请编辑这个问题。不要在注释中放置代码。谢谢你。顺便说一句,我很高兴你得到了答案。你是否尝试过运行此查询,城市名称在国家栏中,OP希望根据图像为城市设置单独的栏。这个解决方案不起作用。
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Temp([Country] VARCHAR(20),[City] VARCHAR(20),[Count] INT)
INSERT INTO #Temp
SELECT 'Germany'    ,'Aachen'    ,1  UNION ALL
SELECT 'USA'        ,'Albuquerque',1 UNION ALL
SELECT 'USA'        ,'Anchorage'     ,1  UNION ALL
SELECT 'Denmark'    ,'Arhus'         ,1  UNION ALL
SELECT 'Spain'      ,'Barcelone'  ,1

DECLARE @Colmn nvarchar(max),
        @Sql nvarchar(max)

SELECT @Colmn=STUFF((SELECT distinct ', '+QUOTENAME([Country]) FROM #Temp
                FOR XML PATH ('')),1,1,'') 

SET @Sql =' SELECT Cityynames ,'+ @Colmn +' FROM
(
SELECT  *,Country AS Countrynames,City AS Cityynames
FROM #Temp
)dt
PIVOT 
(
MAX([Count]) FOR [Country] IN ('+@Colmn+')
) AS Pvt'
PRINT @Sql
EXEC (@Sql)