我的问题是我想从链接到当前对象的数据的表子集中截取一些数据。因此,我想将WHERE条件指定为[ForeignKey] = top.[Id]
,但不允许我在子选择语句中访问top.[Id]
...
SELECT
o.[MemberId] AS 'Member',
o.[Probability] AS 'Probability 1',
o.[ProbabilitySec] AS 'Probability 2',
p.[0], p.[1], p.[2], p.[3], p.[4], p.[5], p.[6], p.[7], p.[8], p.[9], p.[10], p.[11], p.[12], p.[13], p.[14], p.[15], p.[16], p.[17], p.[18], p.[19], p.[20], p.[21], p.[22], p.[23], p.[24], p.[25], p.[26], p.[27], p.[28], p.[29], p.[30], p.[31], p.[32], p.[33], p.[34], p.[35], p.[36], p.[37], p.[38], p.[39], p.[40], p.[41], p.[42], p.[43], p.[44], p.[45], p.[46], p.[47], p.[48], p.[49], p.[50], p.[51], p.[52], p.[53], p.[54], p.[55], p.[56], p.[57], p.[58], p.[59], p.[60], p.[61], p.[62], p.[63], p.[64], p.[65], p.[66], p.[67], p.[68], p.[69], p.[70], p.[71], p.[72], p.[73], p.[74], p.[75], p.[76], p.[77], p.[78], p.[79], p.[80], p.[81], p.[82], p.[83], p.[84], p.[85], p.[86], p.[87], p.[88], p.[89], p.[90], p.[91], p.[92], p.[93], p.[94], p.[95], p.[96], p.[97], p.[98], p.[99], p.[100]
FROM
[Outputs] o,
(
SELECT [Percentile], [Value]
FROM [Percentiles]
WHERE [OutputId] = 1 -- BUG: o.[Id] doesn't work ???
) AS rp
PIVOT
(
SUM(rp.[Value])
FOR rp.[Percentile] IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31], [32], [33], [34], [35], [36], [37], [38], [39], [40], [41], [42], [43], [44], [45], [46], [47], [48], [49], [50], [51], [52], [53], [54], [55], [56], [57], [58], [59], [60], [61], [62], [63], [64], [65], [66], [67], [68], [69], [70], [71], [72], [73], [74], [75], [76], [77], [78], [79], [80], [81], [82], [83], [84], [85], [86], [87], [88], [89], [90], [91], [92], [93], [94], [95], [96], [97], [98], [99], [100])
) p;
数据库架构:
Percentiles是一个表,它为每个输出记录保存0到100之间每个百分位的值,因此其中的数据将如下所示:
1 | 1 | 0 | 0.343
2 | 1 | 1 | 0.678
3 | 1 | 2 | 0.153
4 | 1 | 3 | 0.753
5 | 1 | ... | 0.154
101 | 1 | 100 | 0.834
102 | 2 | 0 | 0.182
103 | 2 | 1 | 0.724
104 | 2 | 2 | 0.692
105 | 2 | 3 | 0.341
106 | 2 | ... | 0.102
目的是将所有这些百分位数作为列,但仅限于给定的OutputId(但我无法在PIVOT使用的子选择中使用o.Id
访问当前的OutputId。
有关信息,在Outputs表中,MemberId不是外键,而只是输出中有用的存储标识符。
您是否知道如何仅链接PIVOT使用的百分位数[OutputId]
等于o.[Id]
(目前,该范围内无法访问o)?顺便说一下,它是上面代码中注释的行。
非常感谢!
答案 0 :(得分:0)
我收到了一位朋友的帮助,他很快就解决了我的问题:)感谢她。如果它可以帮助其他人,这里是固定查询,输出和百分位之间的链接通过PIVOT工作。
SELECT
[ActivityId] AS 'Activity #',
[MemberId] AS 'Member',
[PValue] AS 'Plus Value',
[Probability] AS 'Probability 1',
[ProbabilitySec] AS 'Probability 2',
p.[0], p.[1], p.[2], p.[3], p.[4], p.[5], p.[6], p.[7], p.[8], p.[9], p.[10], p.[11], p.[12], p.[13], p.[14], p.[15], p.[16], p.[17], p.[18], p.[19], p.[20], p.[21], p.[22], p.[23], p.[24], p.[25], p.[26], p.[27], p.[28], p.[29], p.[30], p.[31], p.[32], p.[33], p.[34], p.[35], p.[36], p.[37], p.[38], p.[39], p.[40], p.[41], p.[42], p.[43], p.[44], p.[45], p.[46], p.[47], p.[48], p.[49], p.[50], p.[51], p.[52], p.[53], p.[54], p.[55], p.[56], p.[57], p.[58], p.[59], p.[60], p.[61], p.[62], p.[63], p.[64], p.[65], p.[66], p.[67], p.[68], p.[69], p.[70], p.[71], p.[72], p.[73], p.[74], p.[75], p.[76], p.[77], p.[78], p.[79], p.[80], p.[81], p.[82], p.[83], p.[84], p.[85], p.[86], p.[87], p.[88], p.[89], p.[90], p.[91], p.[92], p.[93], p.[94], p.[95], p.[96], p.[97], p.[98], p.[99], p.[100]
FROM
(
SELECT
o.[ActivityId],
o.[MemberId],
o.[Probability],
o.[ProbabilitySec],
sm.[PValue],
rp.[Percentile],
rp.[Value]
FROM
[modeller].[Outputs] o
INNER JOIN [core].[ScMember] sm
ON sm.[Id] = o.[MemberId]
INNER JOIN
(
SELECT [Percentile], [Value], [OutputId]
FROM [modeller].[Percentiles]
) AS rp
ON o.[Id] = rp.[OutputId]
) AS nested
PIVOT
(
SUM(nested.[Value])
FOR nested.[Percentile] IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31], [32], [33], [34], [35], [36], [37], [38], [39], [40], [41], [42], [43], [44], [45], [46], [47], [48], [49], [50], [51], [52], [53], [54], [55], [56], [57], [58], [59], [60], [61], [62], [63], [64], [65], [66], [67], [68], [69], [70], [71], [72], [73], [74], [75], [76], [77], [78], [79], [80], [81], [82], [83], [84], [85], [86], [87], [88], [89], [90], [91], [92], [93], [94], [95], [96], [97], [98], [99], [100])
) p;