我有一个看起来像这样的表架构
CREATE TABLE [dbo].[Discounts](
[Id] [int] NOT NULL,
[ProductId] [varchar(50)] NOT NULL,
[LowerBoundDays] [int] NOT NULL,
[UpperBoundDays] [int] NOT NULL,
[Discount] [decimal](18, 4) NOT NULL,
还有一些这样的数据
lower upper discount(%)
product1 0 10 0
product1 10 30 1
product1 30 60 2
product1 60 90 3
product1 90 120 4
product2 0 10 0
product2 10 30 1
product2 30 60 2
product2 60 90 3
product2 90 120 4
如何执行数据透视查询以获取如下所示的2行:
0-10 10-30 30-60 60-90 90-120
product1 0 1 2 3 4
product2 0 1 2 3 4
由于使用的是SQL Server,因此有几种方法可以将数据行转换为列。
您可以将聚合函数与CASE表达式一起使用以获取结果:
select productid,
max(case when lower = 0 and upper = 10 then discount end) [0-10],
max(case when lower = 10 and upper = 30 then discount end) [10-30],
max(case when lower = 30 and upper = 60 then discount end) [30-60],
max(case when lower = 60 and upper = 90 then discount end) [60-90],
max(case when lower = 90 and upper = 120 then discount end) [90-120]
from CorporateSpread
group by productid;
如果使用的是SQL Server 2005+,则可以使用PIVOT函数:
select productid, [0-10], [10-30], [30-60], [60-90],[90-120]
from
(
select productid,
discount,
cast(lower as varchar(10)) + '-' + cast(upper as varchar(10)) rng
from CorporateSpread
) d
pivot
(
max(discount)
for rng in ([0-10], [10-30], [30-60], [60-90],[90-120])
) piv;
如果值的数量已知,则上面的两个版本非常有用,但是如果范围的数量未知,那么您将需要使用动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(cast(lower as varchar(10)) + '-' + cast(upper as varchar(10)))
from CorporateSpread
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT productid, ' + @cols + '
from
(
select productid,
discount,
cast(lower as varchar(10)) + ''-'' + cast(upper as varchar(10)) rng
from CorporateSpread
) x
pivot
(
max(discount)
for rng in (' + @cols + ')
) p '
execute sp_executesql @query;
请参阅带有演示的SQL Fiddle。所有版本都会产生结果:
| PRODUCTID | 0-10 | 10-30 | 30-60 | 60-90 | 90-120 |
-----------------------------------------------------
| product1 | 0 | 1 | 2 | 3 | 4 |
| product2 | 0 | 1 | 2 | 3 | 4 |
我似乎不能让我的重定向按期望工作。我的目标是: 将http://example.com重定向到https://www.example.com 将http://www.example.com重定向到https://www.example.com 方法3。 现在有点失落
我有一个如下的模块A,模块A是使用Web包的捆绑包,它包括模块B。该模块还使用需要变量导出高图表库 A.js(在modules文件夹下::src/main/webapp/resources/js/modules) B.js(在公共文件夹下:src/main/webapp/resources/js/Common) 注意ModuleB. js捆绑在A. js中 当我加载javascript时,它向我抛
我正在尝试将instaparse lib用于我的clojure项目。我在项目依赖项中使用leiningen 2.0和clojure 1.5.1。我将instaparse添加到项目依赖项中,如下所示: 这就是我的来源,我试图要求这个lib: 当我尝试编译它时,我会收到以下错误消息: cd c:/BHANCEL/src/BHANCELOR.data/1编译器注释: 未知位置:错误:java.io.Fi
切换到一台新电脑后,我不得不再次安装SmartGIT for Windows,现在尝试克隆我的fedorahosted。组织存储库。密钥存储在C:/User/myusername/中。ssh,SmartGIT提供了一个干净的安装,克隆我的存储库的URL是正确的-不幸的是,SmartGIT没有要求密钥,它只是尝试连接到fedorahosted。但是当然失败了。 所以这里可能出了什么问题?我必须把ss
Java 11、Spring Boot 2.1.3、Spring 5.1.5 我有一个Spring Boot项目,其中某些endpoint由API密钥保护。这在目前的代码中运行良好: 这需要一个包含API密钥的头,但仅适用于 到,但它允许客户端连接到我的API,而无需任何证书。 不需要证书的输出示例: 需要证书和api密钥的输出示例:
Gradle 1.10 或者 1.11 或者 1.12,并且使用 0.11.1 版本的插件 SDK with Build Tools 要求 19.0.0,有些功能可能需要更新的版本