Pivot - 如何求和和计算结果
Posted
技术标签:
【中文标题】Pivot - 如何求和和计算结果【英文标题】:Pivot - how to sum and calculate the outcome 【发布时间】:2017-07-27 18:38:18 【问题描述】:我确信这是一个快速的方法,但是除了答案之外,我尝试了所有方法。我有一个工作正常的枢轴脚本,除了列中的结果,我需要除以 100。所以结果 / 100 脚本是
SELECT
USERID AS UserId,APPOINTMENTDATE,
isnull ([1],0) as'other',isnull ([2],0) as 'Medicare'
FROM
(SELECT invoices.USERID, APPOINTMENTDATE,
[total],PAYERCODE,users.LOCATIONID
FROM APPOINTMENTS
where
APPOINTMENTDATE between '2017-01-22' and '2017-01-23'
) AS SourceTable
PIVOT
(
Sum(total)
FOR PAYERCODE IN ([1], [2])
) AS PivotTable;
所以我想做的是: Sum(total) 更改为 Sum(total/100)
任何想法.. 干杯
【问题讨论】:
【参考方案1】:添加此示例,因为它可以正常工作。这是小提琴:http://sqlfiddle.com/#!6/8eef1/1/0
您的示例代码的问题是您试图在表本身而不是 Pivot 上进行选择。您需要在“SourceTable”中定义列,然后透视 PayerCode,然后执行 Select * FROM (Sourcetable Pivottable)
drop table TestingPivot
Create table TestingPivot
( Total INT,
Payercode INT,
LocationID INT,
UserID INT,
Name VARCHAR(100) )
Insert into TestingPivot values(100, 1, 1, 1, 'Ryan')
Insert into TestingPivot values(200, 2, 2, 2, 'Mike')
Insert into TestingPivot values(300, 3, 3, 3, 'John')
Select * from (
Select Total/100 as NewTotal, PayerCode, UserID, LocationID,
case when PayerCode = 1 then 'Other'
when PayerCode = 2 then 'Medicare'
else ''
end as Type
from TestingPivot
) as t
Pivot
(
Sum(NewTotal)
FOR PayerCode IN ("1","2")
) as P;
【讨论】:
嗨。抱歉,这与我得到的消息相同,即 Msg 102, Level 15, State 1, Line 13 '/' 附近的语法不正确。 如果是这种情况,请在您的选择处除以总数,然后旋转 SUM。应该是相同的数学。已编辑。 不,这会引发错误。消息 8155,级别 16,状态 2,第 17 行没有为“SourceTable”的第 3 列指定列名。消息 207,级别 16,状态 1,第 19 行无效的列名称“总计”。尝试了一些变化...... 它必须是你写它的方式。我在我的数据库上尝试了它,它工作 Select * from (select MemberAge *100 as NewTotal, MemberFirstName from [SCRATCH_Test].[Test] ) 作为 Source PIVOT ( sum(Newtotal) For MemberFirstName in (Gloria, Lori, Nelson) ) 作为可旋转的 上面的测试是年龄值的*100。而不是 /100 但它的语法相同。请用你的表创建一个 SQL Fiddle,让我们看看问题出在哪里。以上是关于Pivot - 如何求和和计算结果的主要内容,如果未能解决你的问题,请参考以下文章