我有一张桌子
EmployeeID IndividualPay FamilyPay IsActive
1 200 300 true
1 100 150 false
但是我希望输出如下(我想使用此输出与其他一些表进行内部联接)
EmployeeID IndPay_IsActive IndPay_IsNotActive FamilyPay_IsActive FamilyPay_IsNotActive
1 200 100 300 150
我已经调查过PIVOT
,但不确定如何使用它。
这种转换称为 枢轴 。您没有指定要使用的数据库,但是可以CASE
在任何系统中使用带有表达式的聚合函数:
select employeeid,
max(case when IsActive = 'true' then IndividualPay end) IndPay_IsActive,
max(case when IsActive = 'false' then IndividualPay end) IndPay_IsNotActive,
max(case when IsActive = 'true' then FamilyPay end) FamilyPay_IsActive,
max(case when IsActive = 'false' then FamilyPay end) FamilyPay_IsNotActive
from yourtable
group by employeeid
参见带有演示的SQL Fiddle
根据您的数据库,如果您可以同时访问PIVOT
和UNPIVOT
函数,则可以使用它们来获取结果。该UNPIVOT
函数将IndividualPay
和FamilyPay
列转换为行。完成后,您可以使用PIVOT
函数创建四个新列:
select *
from
(
select employeeid,
case when isactive = 'true'
then col+'_IsActive'
else col+'_IsNotActive' end col,
value
from yourtable
unpivot
(
value
for col in (IndividualPay, FamilyPay)
) unpiv
) src
pivot
(
max(value)
for col in (IndividualPay_IsActive, IndividualPay_IsNotActive,
FamilyPay_IsActive, FamilyPay_IsNotActive)
) piv
请参阅带有演示的SQL Fiddle。
两者给出相同的结果:
| EMPLOYEEID | INDIVIDUALPAY_ISACTIVE | INDIVIDUALPAY_ISNOTACTIVE | FAMILYPAY_ISACTIVE | FAMILYPAY_ISNOTACTIVE |
----------------------------------------------------------------------------------------------------------------
| 1 | 200 | 100 | 300 | 150 |
问题内容: 我有一个SQL查询 我希望结果应该是。 请帮帮我!! 问题答案: 试试这个:
问题内容: 如何合并这两个SQL语句? 两个表中都存在hits10,hits11和hits12。 问题答案: 使用UNION查询-只需在两个查询之间填入“ UNION”即可: 更新 将联合包装在另一个查询中:
问题内容: 我们有些SQL杂语。说我有一个看起来像这样的结果… 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | A 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | B 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | C 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | D 7ce9
问题内容: 我有两个查询,每个查询返回一个结果,即一个数字 结果 。 结果 我希望将两个结果合并为一行记录,即 问题答案: 您可以使用: 说明:您可以在select语句中选择单个值作为字段,因此可以编写如下内容: 这仅对 标量 查询有效 ,这意味着子查询应具有精确的1列,最多1行。如果有0行,则ValueFromY将返回,而如果有1行以上,则查询将失败。 (在SQL Server,MySQL和其他
问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: 连接行值T-SQL 我是SQL Server的新手,曾经尝试过一些互联网上建议的技术,例如使用临时变量,XML路径等,但是所有这些都不满足我的要求。 我正在使用Toad for SQL Server 5.5版创建SQL脚本,而我用来查询数据库服务器的帐户仅具有READ访问权限。因此不能使用我相信的声明。 表名: 预期产量: 问题
问题内容: 我想要做的是合并几行数据,以便在Transact-SQL或SSIS中将其显示为单行。因此,例如: 制作: 到这个: 因此,我所做的就是将值合并在一起,而忽略了null值。(D =数据; T =更新) 任何建议将是最欢迎的。 谢谢。 问题答案: 这将起作用,但是由于没有标识或日期时间列-无法找到哪个更新行是较新的。因此,如果同一列上有更多更新,那么我只需按字母/数字(MIN)来选择第一个