我有一个包含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
感谢和赞赏
答案 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