Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 使用GROUPBY语句_Sql_Sql Server_Reporting Services - Fatal编程技术网

Sql 使用GROUPBY语句

Sql 使用GROUPBY语句,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我试图在SSRS中使用仅按符号和区域分组来部署一个表,不想按交易分组,因为我得到的结果不正确。我使用了以下代码: SELECT Symbol, Region, Trade, SUM(Profit) AS Total FROM dbo.[15 Mins] GROUP BY Symbol HAVING SUM(Profit)<0 所以基本上我想要的是SSRS: 1获取具有负利润的符号 SYMBOL REGION TRADE SUM(Profit) (+)Apple

我试图在SSRS中使用仅按符号和区域分组来部署一个表,不想按交易分组,因为我得到的结果不正确。我使用了以下代码:

SELECT Symbol, Region, Trade, SUM(Profit) AS Total
FROM dbo.[15 Mins]
GROUP BY Symbol 
HAVING SUM(Profit)<0
所以基本上我想要的是SSRS:

1获取具有负利润的符号

SYMBOL  REGION TRADE SUM(Profit)
(+)Apple                -100  
按下+号后,表格展开并显示以下内容:

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

这就是您想要的,不同地区有不同的行,买入/卖出有不同的行:

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

常规group by规则是:如果指定了group by子句,则SELECT列表中的每个列引用必须标识一个分组列或是集合函数的参数。这意味着您必须决定如何处理不在GROUP BY中的列!Remove、aggregate函数或addtogroupby子句是可选的。另外,如果您添加了示例数据和想要的结果,那么每个人都会更容易理解您要查找的内容。@jarlh:这就足够了吗?从您的选择列表中删除Region and Trade,您将获得第一个结果。当您按+,您只需要所有Apple行?我需要区域和交易数据,因为这有助于用户识别其交易:很抱歉给您添麻烦:如果苹果在两个地区交易呢?是否希望每个区域有不同的行?您想在不同的行中进行交易买卖吗?或者你只是想要空栏?我这样做了,并且我已经提到我不想按交易分组,因为它给了我错误的值。如何?你刚才说过你想买/卖不同的行。。。或者你仍然想要所有苹果行的总和,包括买入和卖出行?我在这里发布之前尝试过这个方法,问题是它显示了带有正和负SumProfit的符号,并且给出了模糊的结果。我非常感谢你努力回答我的问题。干杯,伙计谢谢@Sidux,当我运行此程序时,我得到了错误的值。问这个问题是一个很好的实践:1提供样本数据;2提供预期结果;3提供脚本来生成schema+示例数据。非常感谢@Sidux可视化并提出了如此出色的解决方案。
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
;
SELECT Symbol, Region, Trade, SUM(Profit) AS Total
FROM dbo.[15 Mins]
GROUP BY Symbol, Region, Trade
HAVING SUM(Profit)<0