简单的 SQL 语句

Simple SQL statement

我有一个包含 2 列的 table:MS Access

中的位置和职位

我想创建一个查询来查找每个位置的职位总和。

例如:

Location                   Job Title 
----------------------------------------------
Alabama                   Engineer
Orlando                   Teacher 
Alabama                   Teacher 
Los Angeles               Engineer 

查询结果为:

Location     Alabama      Orlando      Los Angeles 
Job Title       
-----------------------------------------------------------------------------
Engineer        1            0              1
Teacher         1            1              0

感谢并赞赏

使用此指令

select location, job_title, count(job_title)
from table
group by location, job_title

结果将是

Alabama Engineer 1
Alabama Teacher 1
Orlando Teacher 1
Los Angeles Engineer 1

在你得到这个之后(列名是位置,job_title,总和,table 名称是 table1)你可以使用

TRANSFORM FIRST(sum)
SELECT job_title
FROM TABLE1
GROUP BY job_title
PIVOT location

你会得到你想要的

job_title   Alabama Los Angeles Orlando
Engineer    1       1   
Teacher     1                   1

如果您的列数未知,这里有一个示例。它是动态的 sql 查询:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(ColumnName) 
                    from yourtable
                    group by ColumnName, id
                    order by id
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT ' + @cols + N' from 
             (
                select value, ColumnName
                from yourtable
            ) x
            pivot 
            (
                max(value)
                for ColumnName in (' + @cols + N')
            ) p '

exec sp_executesql @query;

注意:如果您不知道实际有多少列,上面的代码会将行转换为列。

您可以尝试以下方法:

FieldA      FieldB  FieldC  FieldD
----------  ------  ------  ------
2013-05-01  A321         1    1120
2013-05-02  A325         1    2261
2013-05-01  A321         2    2120

交叉表查询

TRANSFORM First(FieldD) AS FirstOfFieldD
SELECT FieldA, FieldB
FROM 
    (
        SELECT
            FieldA,
            FieldB,
            'Value' & FieldC AS ColumnName,
            FieldD
        FROM Table
    )
GROUP BY FieldA, FieldB
PIVOT ColumnName

Returns

FieldA      FieldB  Value1  Value2
----------  ------  ------  ------
2013-05-01  A321      1120    2120
2013-05-02  A325      2261