我有三个表,SUsers,Questions和Votes。
-SUsers-具有列: SID、SHName、EmailAdd、Password、DoneVoting、AccessLevel和NumberOfShares
-问题-有列: QID和问题。
-投票-有列: VID、SID、QID、VoteDate和Answer。
这些问题可以用“按顺序”、“反对”和“放弃”来回答。
例如,我有一个NumberOfShares为100的用户1。用户的一票将乘以100。
目前,我有一个工作存储过程,每个用户只有一个投票权。我很难将它与NumberOfShares相乘。
这是我存储的过程。
ALTER PROCEDURE [dbo].[sp_VotingTally2]
@dateFrom NVARCHAR(MAX),
@dateTo NVARCHAR(MAX)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @columns VARCHAR(MAX)
SELECT @columns = COALESCE(@columns + ',','') + QUOTENAME([QID])
FROM (SELECT [QID] FROM [PressRelease].[dbo].[Questions]) st
ORDER BY st.[QID]
DECLARE @sql NVARCHAR(MAX)
SET @sql =
'SELECT * FROM (
SELECT b.[QID],[Answer],[Answer] as Answers FROM [PressRelease].[dbo].[Votes] a INNER JOIN [PressRelease].[dbo].[Questions] b ON a.QID = b.QID
WHERE [VoteDate] >= CAST('''+ @dateFrom +''' AS DATETIME2) AND [VoteDate] <= CAST('''+ @dateTo +'''AS DATETIME2)
) t
PIVOT
(
COUNT([Answer])
FOR [QID] in (' + @columns + ')
) p
'
EXECUTE sp_executesql @sql
END
以下是此存储过程的结果
我一直在尝试不同的方法,但我得到的都是错误,无法得到我想要的东西。我想将这些列中的所有数字与另一个表中某列的数字相乘。该列为NumberOfShares。对于每一位投票者,他们都有自己的股份数量,这些股份需要增加到他们的选票上。我希望你能帮我解决这个问题。
发布于 2020-05-18 09:25:19
首先,让我们先修复您的查询。这部分:
SET @sql = '
SELECT ' + @columns + '
FROM (
SELECT b.[QID], a.[Answer]
FROM [PressRelease].[dbo].[Votes] a
INNER JOIN [PressRelease].[dbo].[Questions] b ON a.QID = b.QID
WHERE a.[VoteDate] >= @dFrom AND a.[VoteDate] <= @dTo
) t
PIVOT(COUNT([Answer]) FOR [QID] in (' + @columns + ')) p
'
EXEC sp_executesql @sql, N'@dFrom datetime, @dTo datetime', @dFrom = @dFrom, @dTo = @dTo;
那么你想乘以什么呢?
发布于 2020-05-19 09:56:08
最好给出您想要连接和乘法的保密表的结构,但让我们假设这是一个"Voters“表:
SET @sql = '
SELECT [Answer], ' + @columns + '
FROM (
SELECT a.[Answer], b.[QID], v.[NumberOfShares]
FROM [PressRelease].[dbo].[Votes] a
INNER JOIN [PressRelease].[dbo].[Questions] b ON a.QID = b.QID
INNER JOIN [PressRelease].[dbo].[Voters] v ON a.VoterID = v.VoterID
WHERE a.[VoteDate] >= @dFrom AND a.[VoteDate] <= @dTo
) t
PIVOT(SUM([NumberOfShares]) FOR [QID] in (' + @columns + ')) p
'
EXEC sp_executesql @sql, N'@dFrom datetime, @dTo datetime', @dFrom = @dFrom, @dTo = @dTo;
https://stackoverflow.com/questions/61865961
复制