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