Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅为派生列中的不同值显示其他列值_Sql_Sql Server_Group By - Fatal编程技术网

Sql 仅为派生列中的不同值显示其他列值

Sql 仅为派生列中的不同值显示其他列值,sql,sql-server,group-by,Sql,Sql Server,Group By,这些是我的桌子结构- 规则 规则集\规则\映射 我试图做的是基于rule.id和ruleset\u rule\u map.rule\u id连接两个表 要获取这样的数据吗- 如果您可以看到,我想从派生列-规则_bucket中删除重复项。 同时,我只想为派生列rule\u bucket中的distincts显示rule\u顺序 已经为相同的问题编写了一个查询- select DISTINCT rrm.RULE_ORDER, CONCAT(r.PARENT_RULE, IIF(r.CHIL

这些是我的桌子结构-

规则 规则集\规则\映射 我试图做的是基于rule.id和ruleset\u rule\u map.rule\u id连接两个表

要获取这样的数据吗-

如果您可以看到,我想从派生列-规则_bucket中删除重复项。 同时,我只想为派生列rule\u bucket中的distincts显示rule\u顺序

已经为相同的问题编写了一个查询-

select DISTINCT rrm.RULE_ORDER, CONCAT(r.PARENT_RULE, 
    IIF(r.CHILD_RULE IS NOT NULL, CONCAT('|', r.CHILD_RULE), r.CHILD_RULE),  
    IIF(r.SUB_CHILD_RULE IS NOT NULL, CONCAT('|', r.SUB_CHILD_RULE), r.SUB_CHILD_RULE), 
    IIF(r.SUB_SUB_CHILD_RULE IS NOT NULL, CONCAT('|', r.SUB_SUB_CHILD_RULE), r.SUB_SUB_CHILD_RULE) )
    AS RULE_BUCKET from [RULE] r 
inner join RULESET_RULE_MAP rrm on rrm.RULE_ID = r.ID 
and rrm.RULESET_ID = 'AAE97A62-F37E-4454-A008-FF40A102BB25' 
and r.PARENT_RULE <> 'N/A' order by rrm.RULE_ORDER;
但是通过上面的查询,我只能得到这样的结果


有人能帮我写下正确的查询吗?也欢迎使用样本帮助我解决上述问题。

您可以使用以下分析功能:

select * from
(select t.*, row_number() over (partition by RULE_BUCKET order by RULE_ORDER desc) as rn
  from
(select rrm.RULE_ORDER, 
        CONCAT(r.PARENT_RULE, 
               IIF(r.CHILD_RULE IS NOT NULL, 
                   CONCAT('|', r.CHILD_RULE), r.CHILD_RULE),  
               IIF(r.SUB_CHILD_RULE IS NOT NULL, 
                   CONCAT('|', r.SUB_CHILD_RULE), r.SUB_CHILD_RULE), 
               IIF(r.SUB_SUB_CHILD_RULE IS NOT NULL, 
                   CONCAT('|', r.SUB_SUB_CHILD_RULE), r.SUB_SUB_CHILD_RULE) )
         AS RULE_BUCKET 
    from [RULE] r 
    inner join RULESET_RULE_MAP rrm on rrm.RULE_ID = r.ID 
      and rrm.RULESET_ID = 'AAE97A62-F37E-4454-A008-FF40A102BB25' 
      and r.PARENT_RULE <> 'N/A') t) t
where rn = 1
 order by RULE_ORDER;

如果确实每个规则存储桶一行,只需使用聚合:

SELECT MIN(RULE_ORDER), RULE_BUCKET
FROM (SELECT rrm.RULE_ORDER,
             CONCAT(r.PARENT_RULE, 
                    IIF(r.CHILD_RULE IS NOT NULL, CONCAT('|', r.CHILD_RULE), r.CHILD_RULE),  
                    IIF(r.SUB_CHILD_RULE IS NOT NULL, CONCAT('|', r.SUB_CHILD_RULE), r.SUB_CHILD_RULE), 
                    IIF(r.SUB_SUB_CHILD_RULE IS NOT NULL, CONCAT('|', r.SUB_SUB_CHILD_RULE), r.SUB_SUB_CHILD_RULE)
                    ) AS RULE_BUCKET
      FROM [RULE] r JOIN
           RULESET_RULE_MAP rrm 
           ON rrm.RULE_ID = r.ID AND
              rrm.RULESET_ID = 'AAE97A62-F37E-4454-A008-FF40A102BB25' AND
              r.PARENT_RULE <> 'N/A'
    ) r
GROUP BY RULE_BUCKET
ORDER BY MIN(rrm.RULE_ORDER);

数据的图像真的帮不了我们,特别是当你也不解释逻辑的时候。花点时间以可消费的格式发布数据,并包含其背后的逻辑。向我们显示列名称的图片也无法帮助我们了解数据的外观。您希望数据采用何种可消费格式?请让我知道。我已经问了上面的问题->如果你能看到我想从派生列-rule_bucket中删除重复项。同时,我只想为派生列rule_bucket中的distincts显示rule_order。我们可以复制和粘贴的东西,我们可以使用的东西。我们不能从图像中复制数据,这对那些使用屏幕阅读器的人也没有帮助。DDL和DML语句最好,否则可以使用格式良好的表格文本。@Larnu-谢谢!将使用规则表和规则集\规则\映射表的数据更新问题。@codingNubie。您的示例数据仍然有重复的规则,例如第13行和第15行,因此您的问题仍然不清楚。