我有一个存储有关的大量文件,比如他们的语言,独特的ID,文件路径等。我希望能够得到的唯一ID使我有资产类型的子串数据的表,这是总是第2个字母的ID。 那么我想按语言这些资产类型和有多少每种类型的每一种语言都有的计数。 所以在最后我会像理想,有一个语言列,然后对每个子(资产类型)列的表。
我试图创建一个大的switch语句,但这不是非常可靠,有人告诉我,也许LINQ的效果会更好。 我没有使用LINQ或SQL很多经验,我有一对夫妇的SQL查询我已经试过了让我所期望的结果的一部分,但我希望也许有人谁拥有更多的经验可能知道如何分组这些功能到一个语句。
SELECT
LCID,
SUBSTRING(AssetID,1,2)
FROM [table]
这让我正确的子串,但我必须为每种语言多行。 有什么办法来组相同的语言成一列,然后怎么算每种类型的有? 谢谢
听起来像是你想有一个COUNT
和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)