代码之家  ›  专栏  ›  技术社区  ›  Hien Nguyen

SQL Server Compact中以逗号分隔的值联接无效

  •  1
  • Hien Nguyen  · 技术社区  · 4 年前

    我有两张桌子,如下所示

    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,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]);
    

    我尝试了查询标记计数和一个Id的标记列表的答案,它在SQL Server中运行良好

    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
    

    enter image description here

    但在SQL Server compact数据库中,它不起作用

    enter image description here

    我使用CompactView与SQL compact DB一起运行查询

    https://sourceforge.net/projects/compactview/

    我的查询或SQL Compact有什么问题?谢谢

    2 回复  |  直到 4 年前
        1
  •  2
  •   ErikEJ    4 年前

    SQL Server Compact不支持XML数据类型和函数,嵌套的SSELECT也不起作用。编写一个简单的select,并在代码中执行额外的处理。

        2
  •  -1
  •   gotqn user3521065    4 年前

    试试这个:

    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 连接字符串。