SQL从数组中选择

SQL从数组中选择,sql,postgresql,pivot,crosstab,Sql,Postgresql,Pivot,Crosstab,有没有一种简单的方法可以从(长)数组中进行选择? 我想要这样的东西 SELECT citizenship, count(1) FROM table WHERE year(date) = 2018 GROUP BY citizenship 但我希望所有公民身份列和所有日期(从2000年到2018年)行,这样我就可以删除where子句 添加distinct将为您提供唯一公民的列表 SELECT distinct citizenship FROM table WHERE year(date)

有没有一种简单的方法可以从(长)数组中进行选择? 我想要这样的东西

SELECT citizenship, count(1) 
FROM table 
WHERE year(date) = 2018 
GROUP BY citizenship
但我希望所有公民身份列和所有日期(从2000年到2018年)行,这样我就可以删除where子句

添加distinct将为您提供唯一公民的列表

SELECT distinct citizenship
FROM table 
WHERE year(date) >= 2000 and year(date) <= 2018 
选择不同的公民身份
从桌子上

其中year(date)>=2000,year(date)听起来像是要使用透视列

这是我想你想要的。。。(在SQL Server中) 见本文:

适用于你,可能是

    --Declare necessary variables
DECLARE   @SQLQuery AS NVARCHAR(MAX)
DECLARE   @PivotColumns AS NVARCHAR(MAX)

--Get unique values of pivot column  
SELECT   @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME([citizenship])
FROM (SELECT DISTINCT [citizenship] FROM [dbo].[table]) AS PivotExample


--Create the dynamic query with all the values for 
--pivot column at runtime
SET   @SQLQuery = 
    N'SELECT [Year], ' +   @PivotColumns + '
    FROM (SELECT [citizenship], YEAR([Date]) AS [Year], COUNT(1) As Counter 
          FROM [Table] GROUP BY [citizenship], YEAR([Date])) AS A
    PIVOT( SUM(Counter) 
          FOR [citizenship] IN (' + @PivotColumns + ')) AS P'

SELECT   @SQLQuery
--Execute dynamic query
EXEC sp_executesql @SQLQuery

标记您正在使用的DBMS(即
MySQL
SQL Server
等)。添加数组的数据示例。。(至少)谢谢,这是我需要的