-1

我想在以下查询中添加联接“JOIN {User} ON {Deck}.[CreatedBy] = {User}.[Id]”。我尝试了很多组合但没有成功。我想从用户表中获取名称

    SELECT  @CampaignQueryFilterString AS [Selected],
    {Deck}.[Id], {Deck}.[Name],
    {User}.[Name],
    {Deck}.[TableOfContentId], {Deck}.[CreatedBy],
    {Deck}.[LastModifiedOn], {Deck}.[ExpiryDate],s1.[Count]      
    FROM  {Deck}
    JOIN
    (
        SELECT {Deck}.[Id],
        LISTAGG( {TagValue}.[Id], ',' ) WITHIN GROUP (ORDER BY {TagValue}.[TagCategoryId] ) AS Tags
        FROM {Deck} 
        JOIN {AssociatedDeckTags}
        ON {AssociatedDeckTags}.[DeckId] = {Deck}.[Id]
        JOIN {TagValue}
        ON {AssociatedDeckTags}.[TagValueId] = {TagValue}.[Id]
        WHERE {Deck}.[IsPublished] = 1
                AND {Deck}.[IsActive] = 1 AND {Deck}.[ReplacedByDeckId] IS NULL
                AND {Deck}.[TableOfContentId] IN @TableOfContentIdFilterString
                AND {Deck}.[ContentFileTypeId] IN @AllowedContentType
                AND {Deck}.[ExpiryDate] > SYSDATE
        GROUP BY {Deck}.[Id]       
    ) DeckView
    ON {Deck}.[Id] = DeckView.Id  
    JOIN(
        SELECT COUNT(*) AS [Count], {DeckGroup}.[DeckId] AS [S1DeckId]
        FROM {DeckGroup}
        JOIN {Slide} ON {Slide}.[DeckGroupId] = {DeckGroup}.[Id]
        GROUP BY {DeckGroup}.[DeckId]
    ) s1 ON s1.[S1DeckId] = {Deck}.[Id]
    @RegexString
    @SearchFilter
    @CreatedBy
    GROUP BY 
    {Deck}.[Id], {Deck}.[Name], {Deck}.[TableOfContentId], 
    {Deck}.[CreatedOn], {Deck}.[CreatedBy],
    {Deck}.[LastModifiedOn], {Deck}.[ExpiryDate], 
    {Deck}.[NumOfPreviews], {Deck}.[NumOfDownloads],s1.[Count]        
    ORDER BY @Orderby
4

1 回答 1

1

看起来只是加入,请尝试以下查询(使用您的符号)。我left joingroup by子句中添加了 - {User}.[Name]。或者,您可以使用一些聚合函数{User}.[Name]- max()listagg()并将其从group by子句中删除。

SELECT @CampaignQueryFilterString AS [Selected],
       {Deck}.[Id], {Deck}.[Name], {User}.[Name], {Deck}.[TableOfContentId], 
       {Deck}.[CreatedBy], {Deck}.[LastModifiedOn], {Deck}.[ExpiryDate], s1.[Count]
  FROM {Deck}
  JOIN DeckView ON {Deck}.[Id] = DeckView.Id            -- subquery1 
  JOIN s1 ON s1.[S1DeckId] = {Deck}.[Id]                -- subquery2 
  LEFT JOIN {User} ON {Deck}.[CreatedBy] = {User}.[Id]  -- <-- add join here
  @RegexString
  @SearchFilter
  @CreatedBy
  GROUP BY 
    {Deck}.[Id], {Deck}.[Name], {User}.[Name],          -- <-- add column here 
    {Deck}.[TableOfContentId], {Deck}.[CreatedOn], 
    {Deck}.[CreatedBy], {Deck}.[LastModifiedOn], 
    {Deck}.[ExpiryDate], {Deck}.[NumOfPreviews], 
    {Deck}.[NumOfDownloads], s1.[Count]
  ORDER BY @Orderby

你没有展示你的尝试,所以我们不知道是否有错误或不想要的结果。对于这种形式的问题,我只能提供帮助。也是Oracle 保留字USER之一,最好避免将其用作别名、变量名等。

于 2017-12-27T11:41:23.327 回答