【发布时间】:2013-04-15 06:36:28
【问题描述】:
请考虑这种情况:
我有一张这样的桌子:
CityCode CityName Col_6 Col_9 Col_10
----------------------------------------------------------------------
001 London 10 21 1
001 London 24 13 2
001 London 39 10 2
002 Paris 19 61 1
002 Paris 10 50 1
003 Vien 12 41 2
004 Mosco 22 27 2
004 Mosco 28 9 2
004 Mosco 41 30 1
004 Mosco 33 12 1
005 Cairo 10 21 1
006 Milan 19 41 1
006 Milan 40 32 2
我想写一个查询来计算每个城市的一些公式。现在我使用一个游标来区分不同的城市,然后选择适当的记录并进行计算:
DECLARE mycur CURSOR
FOR
SELECT CityCode
FROM tblCities
OPEN mycur
FETCH NEXT FROM mycur INTO @param_Code
WHILE (@@fetch_status = 0)
BEGIN
SELECT
@param_Code, (SELECT COUNT(*)
FROM MyTable
WHERE col_9 = 61
AND (City_Code = @param_Code)
) /
(SELECT COUNT(*)
FROM MyTable
AND (City_Code = @param_Code)
),
(SELECT COUNT(*)
FROM MyTable
WHERE col_10 = 1
AND (City_Code = @param_Code)) /
(SELECT COUNT(*)
FROM MyTable
WHERE (col_10 = 1 OR col_10 = 2)
AND (City_Code = @param_Code)),
Some other calculation like above
FETCH NEXT FROM mycur INTO @param_Code
END
CLOSE mycur
DEALLOCATE mycur
@param_Code 是我的游标变量。
我怎样才能做得更好?我不想使用派生表。我更喜欢使用相关子查询或联接。
谢谢
【问题讨论】:
标签: sql sql-server performance sql-server-2008