这是我的原始查询
SELECT acct_id,
acct_client_short_name,
acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code,
SUM(traded_shrs_num),
SUM(curr_shrs_num) AS c1
FROM (SELECT 'ID900910' AS acct_id,
'CNS Netting' AS acct_client_short_name,
'CNS' AS acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code,
traded_shrs_num,
curr_shrs_num
FROM [csr_staging].[dbo].[fi_impact_source]
WHERE (clearing_code = 'MBS'
OR clearing_code = 'CNS')
AND (SD_ID >= EFF_DT)) a
GROUP BY acct_id,
acct_client_short_name,
acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code;
总行数= 383行
如何从上述查询中获取总行数?
即select count(*),sum(c1) from query1
?
答案 0 :(得分:1)
您应该这样写:
SELECT count(*), sum(c1) FROM (SELECT ...) x
换句话说:
SELECT count(*), sum(c1)
FROM (
SELECT acct_id,
acct_client_short_name,
acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code,
SUM(traded_shrs_num) AS c2,
SUM(curr_shrs_num) AS c1
FROM (SELECT 'ID900910' AS acct_id,
'CNS Netting' AS acct_client_short_name,
'CNS' AS acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code,
traded_shrs_num,
curr_shrs_num
FROM [csr_staging].[dbo].[fi_impact_source]
WHERE (clearing_code = 'MBS'
OR clearing_code = 'CNS')
AND (SD_ID >= EFF_DT)) a
GROUP BY acct_id,
acct_client_short_name,
acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code
) x
这被称为“派生表”。
答案 1 :(得分:0)
尝试以下代码。但是,由于其他值按列分组,因此该代码将为您提供所有行中重复的记录总数。
;WITH CTE
AS
(
SELECT 'ID900910' AS acct_id,
'CNS Netting' AS acct_client_short_name,
'CNS' AS acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code,
traded_shrs_num,
curr_shrs_num
FROM [csr_staging].[dbo].[fi_impact_source]
WHERE (clearing_code = 'MBS'OR clearing_code = 'CNS'
)
AND (SD_ID >= EFF_DT)
)
SELECT acct_id,
acct_client_short_name,
acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code,
SUM(traded_shrs_num),
SUM(curr_shrs_num) AS c1,
(SELECT COUNT(*) FROM CTE) AS [RecordCount]
FROM CTE
GROUP BY acct_id,
acct_client_short_name,
acct_cat_code,
cusip_num,
symbol_code,
product_name,
sec_type_code,
acct_type_code,
ann_int_rate_and_maturity_dt_text,
sd_id,
loc_code,
settled_flag,
td_id,
eff_dt,
clearing_code
;