回答
您可以使用类似:
select Month, [2017-04], [2017-03], [2017-02], [2017-01]
from your_Table
where Month in ('A', 'B')
union all
select
'C'
T1.[2017-04] - T2.[2017-04],
T1.[2017-03] - T2.[2017-03],
T1.[2017-02] - T2.[2017-02],
T1.[2017-01] - T2.[2017-03]
from your_Table as T1
left outer join your_Table as T2 on T2.Month = 'A'
where T1.Month = 'B'
Andy,如果桌子上有100行,这将不起作用... upvoted,因为逻辑是正确的。 –
@冰塔当然不会。但OP在评论中提到,期望的结果应该是用两个指定行B和A减去数据。它看起来很奇怪 - 但这是原始要求:*“即使有100列也要减去B行 - 一行” * –
是的正确。 [2017-04],[2017-03],[2017-02],[2017-01]这些值是动态的。我想减去B行 - 一行 –
非常奇怪的问题,而是:
SELECT Month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
FROM (
SELECT Month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
, 1 as mOrder
FROM table
WHERE Month in ('B','A')
UNION ALL
SELECT 'C'
, sum(case Month = 'A' then [2017-04]*-1 else [2017-04] end)
, sum(case Month = 'A' then [2017-03]*-1 else [2017-04] end)
, sum(case Month = 'A' then [2017-02]*-1 else [2017-04] end)
, sum(case Month = 'A' then [2017-01]*-1 else [2017-04] end)
, 2 as morder
FROM table
WHERE Month in ('B','A')
)
ORDER BY Month, mOrder
如果我理解正确的话,您将需要动态地添加行和检查应与总是做因此我会使用以下代码:
insert into dbo.tab1
select 'C' as month
, t.[2017-04] - tprev.[2017-04] as [2017-04]
, t.[2017-03] - tprev.[2017-03] as [2017-03]
, t.[2017-02] - tprev.[2017-02] as [2017-02]
, t.[2017-01] - tprev.[2017-01] as [2017-01]
from (
select ROW_NUMBER() OVER(ORDER BY month) AS Nr
, month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
from dbo.tab1
) t left join (
select ROW_NUMBER() OVER(ORDER BY month) AS Nr
, month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
from dbo.tab1
) tprev on t.Nr = (tprev.Nr -1) -- join with prev row to get the difference
您可以将此i在预先生成月份值的循环中,并在此处传递它是一个参数。 我生成了行号并加入了它,因为如果您的行数多于前两行,则需要添加一列。 你可以检查这个here的工作版本。
- 1. 使用Django减去网络服务器
- 2. 获取动态SQL的结果转化为SQL服务器
- 3. SQL服务器动态SQL
- 4. 减去动态列
- 5. 减去两个结果
- 6. 使用$减轻服务器
- 7. 如何使用节点服务动态图像服务器
- 8. 映射结果在SQL服务器
- 9. SQL服务器:扁平化PIVOT结果
- 10. 压扁SQL服务器INNER JOIN结果
- 11. SQL服务器调换查询结果
- 12. SQL服务器加入结果条件
- 13. 如何“减去”sql表?
- 14. SQL Server - 减去两个SQL查询的结果
- 15. 启动IIS服务器,如果IIS服务器没有运行
- 16. 如何使用jquery动态减去每个表行中的列值
- 17. 如何查询结果与分页SQL服务器和PHP
- 18. 如何使用Pycharm在SQL服务器中运行SQL?
- 19. 从服务器发送动态错误/失败结果信息
- 20. SQL服务器 - 行分列无结块
- 21. 链接服务器查询/动态SQL
- 22. T-SQL动态链接服务器
- 23. 动态枢轴Sql服务器
- 24. 动态WHERE语句 - SQL服务器2005
- 25. 动态列 - SQL服务器 - 月为列
- 26. SQL服务器:动态where子句
- 27. 如何在动态SQL中处理从OpenQuery调用链接分析服务器的空结果集?
- 28. 如何在SQL Server 2000中执行服务器端分页结果?
- 29. 减去后有趣的结果
- 30. 从查询结果中减去1
如果它有更多的行(例如100行)你的逻辑输出将如何? –
你在哪里得到行C的值? –
我需要获得新的行。您可以使用任何文本而不是C。月值为动态 –