我有一个表有以下栏目:集团通过显示在特定日期的百分比
StockID,FundID,DateID,ValueInDate
我想创建一个GROUP BY查询,显示从总 价值的百分比每个基金具体日期,不带参数。
我有@DateID
参数仅在此查询
任何想法?
我有一个表有以下栏目:集团通过显示在特定日期的百分比
StockID,FundID,DateID,ValueInDate
我想创建一个GROUP BY查询,显示从总 价值的百分比每个基金具体日期,不带参数。
我有@DateID
参数仅在此查询
任何想法?
您可能希望使用派生表(不相关的子查询)来获取特定@DateID
的值的总和。请看下面的例子:
SELECT t.*, (t.ValueInDate/dt.sum_value) * 100 as perc
FROM your_table t
JOIN (
SELECT SUM(ValueInDate) sum_value, DateId
FROM your_table
WHERE DateID = @DateID
GROUP BY DateId
) dt ON (dt.DateID = t.DateID)
WHERE t.DateID = @DateID;
测试用例:
CREATE TABLE your_table (
StockID int, FundID int, DateID int, ValueInDate decimal(10,2)
);
INSERT INTO your_table VALUES (1, 1, 1, 35);
INSERT INTO your_table VALUES (2, 1, 1, 75);
INSERT INTO your_table VALUES (3, 2, 1, 25);
INSERT INTO your_table VALUES (4, 2, 1, 50);
INSERT INTO your_table VALUES (5, 3, 2, 15);
INSERT INTO your_table VALUES (6, 3, 2, 25);
INSERT INTO your_table VALUES (7, 4, 2, 30);
INSERT INTO your_table VALUES (8, 4, 2, 60);
结果时@DateID = 1
:
+---------+--------+--------+-------------+-----------+
| StockID | FundID | DateID | ValueInDate | perc |
+---------+--------+--------+-------------+-----------+
| 1 | 1 | 1 | 35.00 | 18.918919 |
| 2 | 1 | 1 | 75.00 | 40.540541 |
| 3 | 2 | 1 | 25.00 | 13.513514 |
| 4 | 2 | 1 | 50.00 | 27.027027 |
+---------+--------+--------+-------------+-----------+
4 rows in set (0.00 sec)
这是解决方案 - 在总和下面的解决方案是不是对每个基金,它的所有资金一起。我修复了一点,感谢Daniel Vassallo!
DECLARE @DATEID int
SET @DATEID=1
SELECT t.FundID,t.ValueInDate/CAST(dt.sum_value AS FLOAT) as perc,dt.sum_value
FROM tbl_Holding_Gemel t JOIN tbl_Funds tf ON t.FundID = tf.FundID
JOIN (
SELECT SUM(ValueInDate) sum_value, FundID
FROM tbl_Holding_Gemel
WHERE DateID = @DateID
Group By FundID
) dt ON (dt.FundID = t.FundID)
WHERE t.DateID = @DateID
如果这是解决方案,那么您应该将其标记为答案。 – 2010-09-13 00:21:17
你不需要子查询中的GROUP BY吗? – 2010-09-05 11:11:07
@a_horse_with_no_name:使用MySQL时,没有必要。其他DBMS可能需要它。让我补充一点,以防万一...完成 – 2010-09-05 11:12:17
我认为这将是SQL Server,因为@DateID参数。不知道MySQL有相同的参数语法。 – 2010-09-05 11:13:58