问题描述
我有2张桌子,如下所示
CREATE TABLE [Chart]
(
[Id] BIGINT NOT NULL IDENTITY (1,1),[Owner] NVARCHAR(100),[Identifier] NVARCHAR(128) NOT NULL,[Title] NVARCHAR(100),[Type] INT NOT NULL,[Category] INT NOT NULL,[CreatedDate] DATETIME NOT NULL,[ModifiedDate] DATETIME,[ExpireDate] DATETIME,[VisitCount] BIGINT NOT NULL,[ConfigurationId] BIGINT NOT NULL,[Theme] NVARCHAR(50)
);
ALTER TABLE [Chart] ADD CONSTRAINT [PK_dbo.Chart] PRIMARY KEY ([Id]);
CREATE TABLE [SelectedTag]
(
[Id] BIGINT NOT NULL IDENTITY (1,[Identifier] NVARCHAR(4000),[TagName] NVARCHAR(4000),[Description] NVARCHAR(4000),[EuUnit] NVARCHAR(50),[EuRangeLow] NVARCHAR(50),[EuRangeHigh] NVARCHAR(50),[MinStats] FLOAT,[MaxStats] FLOAT,[Min] FLOAT,[Max] FLOAT,[GroupCode] NVARCHAR(4000)
);
ALTER TABLE [SelectedTag] ADD CONSTRAINT [PK_dbo.SelectedTag] PRIMARY KEY ([Id]);
我尝试了这个答案来查询Tag Count和TagList,以获得一个在SQL Server中效果很好的ID。
https://dba.stackexchange.com/q/112408/172901
select c.Identifier,count(c.Identifier) as TagCount,(
select concat(',',s.TagName) from selectedtag as s
where concat(',c.identifier,') like '%,'+s.identifier+',%'
for xml path(''),type
).value('substring(text()[1],2)','varchar(max)') as TagList
from chart c
group by c.Identifier
但是对于SQL Server紧凑型数据库,它不起作用
我使用CompactView通过SQL Compact DB运行查询
https://sourceforge.net/projects/compactview/
查询或SQL Compact问题是什么?谢谢
解决方法
SQL Server Compact不支持XML数据类型和函数,并且嵌套的sSELECT也不起作用。编写一个普通选择,然后用代码执行其他处理。
,尝试一下:
SELECT c.[Identifier],COUNT(c.[Identifier]) AS TagCount,STRING_AGG(ST.[TagName],',') AS TagList
FROM [Chart] C
INNER JOIN selectedtag ST
ON C.[Identifier] = ST.[Identifier]
GROUP BY c.[Identifier];
由于您使用的是SQL Server 2017,因此可以使用STRING_AGG连接字符串。