简单的SQL语句

时间:2016-12-13 07:30:18

标签: sql ms-access-2013

我有一个包含2列的表格: 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

感谢和赞赏

2 个答案:

答案 0 :(得分:2)

使用此说明

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

你得到这个(列名是location,job_title,sum,表名是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

答案 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

返回

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