使用Group By语句

时间:2015-03-16 07:50:26

标签: sql sql-server reporting-services

我正在尝试仅使用Symbolregion使用群组在SSRS中部署表格,并且不希望按交易进行分组,因为我的结果不正确。我使用了以下代码:

SELECT Symbol, Region, Trade, SUM(Profit) AS Total
FROM dbo.[15 Mins]
GROUP BY Symbol 
HAVING SUM(Profit)<0

该报告称Column&#d; dbo.15 Mins.Trade&#39;在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我想要的是仅用符号对负数(利润)进行分组,并说当我点击SSRS报告上的加号时,它会进一步向下钻取并显示详细数据:符号 - 地区 - 贸易 - 利润每笔交易。

例如

SYMBOL  REGION TRADE PROFIT

Apple   NYSE   BUY   100  
Apple   NYSE   BUY   -200
MSFT    NYSE   BUY   300
MSFT    NYSE   SELL  500

所以基本上我想要的SSRS:

1)获得具有负和(利润)的符号

SYMBOL  REGION TRADE SUM(Profit)
(+)Apple                -100  

按下(+)符号后,表格会展开并显示以下内容:

SYMBOL  REGION TRADE SUM(Profit)
Apple   NYSE   BUY   100  
Apple   NYSE   BUY   -200

2 个答案:

答案 0 :(得分:1)

CREATE TABLE #a
(
    symbol VARCHAR(100),
    region VARCHAR(100),
    trade VARCHAR(100),
    profit int
)

INSERT INTO #a VALUES ('Apple',   'NYSE',   'BUY',   100  );
INSERT INTO #a VALUES ('Apple',   'NYSE',   'BUY',   -200);
INSERT INTO #a VALUES ('MSFT ',   'NYSE',   'BUY',   300);
INSERT INTO #a VALUES ('MSFT ',   'NYSE',   'SELL', 500);

SELECT a.symbol ,
       a.region ,
       a.trade ,
       a.profit,
       b.profit AS negative_profit
FROM #a a
JOIN (
SELECT b.symbol, SUM(b.profit) profit FROM #a b GROUP BY b.symbol HAVING  SUM(b.profit) < 0
) b
ON  a.symbol = b.symbol
;

答案 1 :(得分:0)

这是您想要的,不同地区的不同行以及买/卖的不同行:

SELECT Symbol, Region, Trade, SUM(Profit) AS Total
FROM dbo.[15 Mins]
GROUP BY Symbol, Region, Trade
HAVING SUM(Profit)<0