听起来你想要 aCOUNT
和 a GROUP BY
:
SELECT
SUBSTRING(AssetID,1,2),
COUNT(*) Total
FROM [table]
GROUP BY SUBSTRING(AssetID,1,2)
您没有指定什么数据库,但是,如果您使用的是 SQL Server 并且LCID
在您的SELECT
语句中,那么您需要将它包含在您的GROUP BY
子句中。
如果每一行的LCID
值都是唯一的,那么您将为每行获得多条记录,AssetID
因为它会尝试将唯一值组合在一起。结果,我删除了LCID
.
如果它不是唯一的,那么您可以使用:
SELECT LCID,
SUBSTRING(AssetID,1,2),
COUNT(*) Total
FROM [table]
GROUP BY LCID, SUBSTRING(AssetID,1,2)
根据您所做的编辑,您需要PIVOT
将数据从行转换为列。对于PIVOT
您将使用:
select LCID, HA, HT, HP, FH, FX
from
(
SELECT LCID,
SUBSTRING(AssetID,1,2) AssetID
FROM [table]
) src
pivot
(
count(AssetID)
for AssetID in (HA, HT, HP, FH, FX) -- place more values here
) piv
如果要转换为列的值未知,则需要使用类似于以下的动态 SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(SUBSTRING(AssetID,1,2))
from [table]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT LCID, ' + @cols + ' from
(
SELECT LCID,
SUBSTRING(AssetID,1,2) AssetID
FROM [table]
) x
pivot
(
count(AssetID)
for AssetID in (' + @cols + ')
) p '
execute(@query)