【问题标题】:Merging SQL columns only for specific rows in the output仅为输出中的特定行合并 SQL 列
【发布时间】:2016-05-20 14:25:05
【问题描述】:

只是想知道是否有人可以提供帮助?我正在 Quality Center v9 中创建一些 xls 报告。

通过汇总,我有基于 'cy_cycle' 列的小计以及总体总计。

查询: 是否可以仅在显示列“cy_cycle”的这些小计行的位置合并列“cy_cycle”和“cf_item_name”?

我曾尝试将 case 与 concat 等一起使用,但没有运气,所以毫无疑问是朝着错误的方向前进,并且不确定它是否真的可以完成?

ps - 有一个参数 - 'Report_Date'

Select nvl(cy_cycle, '# Total for ........ ' ) as "QC Test Set"*
,nvl(cf_item_name,'## DAILY TOTAL ##') as "Parent Folder"
,@Report_Date@  as "Report Date"
,count(TC_Status) as "Test Set Total"
,SUM(case when TC_Status = 'Passed' then 1 else 0 end) as "Passed"
,Sum(case when TC_Status = 'Failed' then 1 else 0 end) as "Failed"
,Sum(case when TC_Status = 'Blocked' then 1 else 0 end) as "Blocked"
,Sum(case when TC_Status = 'Not Completed' then 1 else 0 end) as "Not Completed"
,Sum(case when TC_Status = 'N/A' then 1 else 0 end) as "Not Applicable"
,Sum(case when TC_Status = 'No Run' then 1 else 0 end) as "No Run"
,Sum(case when TC_Status = 'De-Scoped' then 1 else 0 end) as "De-Scoped"
From (TESTCYCL inner join CYCLE on tc_cycle_id=cy_cycle_id) inner join CYCL_FOLD on cy_folder_id=cf_item_id
Where cy_folder_id in(Select cf_item_id From CYCL_FOLD Where cf_item_path like 'AAAABBAAIAAE%')--**Pre-Pop Final_1**
and trunc(tc_exec_date) = trunc(to_date( @Report_Date@ ,'DD-MON-YYYY'))
group by rollup(cf_item_name, cy_cycle)

在此先感谢您的帮助 :-)

感谢大家的回复。

参考 DBMS - 它的 Oracle。

请求中的问题不清楚 - 我正在查看是否可以合并列 'qc_test_set' 和 'Parent_folder' 仅用于列 'qc_test_set' 中的那些记录为空的情况(我使用 nvl 给 '总计...'但没有显示任何其他列? {例如,在第 1 列和第 2 列下方的记录 3、5、9 和 10 中,将被合并/连接在一起}

目前它显然是纯粹的装饰性和可读性,但我想如果我可以合并这些,我也可以右对齐以方便阅读。

(我已经删除了一些记录,所以总的总数在下面)

QC Test Set         Parent Folder      Report Date  Test Set Total  Passed
-----------         -------------      -----------  -------- -----  ------
Branch              CR95               10-May-16    11          11
Business            CR95               10-May-16    5           5
# Total for ....    CR95               10-May-16    16          16
Issue 49            04 Misc            10-May-16    4           4
# Total for ....    04 Misc            10-May-16    4           4
Personal            01 Pre-Des         10-May-16    6           6
Personal            01 Pre-Des         10-May-16    2           2
Non-Personal        01 Pre-Des         10-May-16    2           2
# Total for ....    01 Pre-Des         10-May-16    10          10
# Total for ....    ## DAILY TOTAL ##  10-May-16    44          42

【问题讨论】:

  • 当你说“合并列”时,你是什么意思?
  • 另外,这是什么 DBMS?
  • 看起来像甲骨文。

标签: sql merge


【解决方案1】:

我不确定你到底是什么意思:

仅显示列“cy_cycle”的这些小计行

如果您碰巧想在 cy_cycle 不为空的任何地方将cy_cyclecf_item_name 连接起来,那么CASE 应该可以正常工作:

Select nvl(cy_cycle, '# Total for ........ ' ) as "QC Test Set"*
,nvl(cf_item_name,'## DAILY TOTAL ##') as "Parent Folder"
, CASE WHEN cy_cycle IS NULL THEN '' ELSE cy_cycle + cf_item_name END AS CycleItemMerge
,@Report_Date@  as "Report Date"
,count(TC_Status) as "Test Set Total"
,SUM(case when TC_Status = 'Passed' then 1 else 0 end) as "Passed"
,Sum(case when TC_Status = 'Failed' then 1 else 0 end) as "Failed"
,Sum(case when TC_Status = 'Blocked' then 1 else 0 end) as "Blocked"
,Sum(case when TC_Status = 'Not Completed' then 1 else 0 end) as "Not Completed"
,Sum(case when TC_Status = 'N/A' then 1 else 0 end) as "Not Applicable"
,Sum(case when TC_Status = 'No Run' then 1 else 0 end) as "No Run"
,Sum(case when TC_Status = 'De-Scoped' then 1 else 0 end) as "De-Scoped"
From (TESTCYCL inner join CYCLE on tc_cycle_id=cy_cycle_id) inner join CYCL_FOLD on cy_folder_id=cf_item_id
Where cy_folder_id in(Select cf_item_id From CYCL_FOLD Where cf_item_path like 'AAAABBAAIAAE%')--**Pre-Pop Final_1**
and trunc(tc_exec_date) = trunc(to_date( @Report_Date@ ,'DD-MON-YYYY'))
group by rollup(cf_item_name, cy_cycle)

这假定cy_cyclecf_item_name 都已经是字符串/字符数据类型(因此,不需要在其中包含CONVERTTO_CHAR)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2015-08-03
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多