【问题标题】:Simple SQL statement简单的 SQL 语句
【发布时间】:2016-12-13 07:30:17
【问题描述】:

我有一个包含 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

感谢和赞赏

【问题讨论】:

  • 在查询中只需使用 pivot 或 CASE

标签: sql ms-access-2013


【解决方案1】:

使用这条指令

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

【讨论】:

【解决方案2】:

如果您的列数未知,这里是一个示例。是动态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      

【讨论】:

  • 感谢您的及时答复。但是,我不确定如何使用它。我正在使用 MS Access。
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 2015-07-26
  • 2014-06-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多