SQL仅在非空时翻转和获取行
我一直在努力解决一个大问题,只是不知道如何才能做到。。。因此,感谢您的SQL专家提供的任何帮助 我现在有一张这样的桌子:SQL仅在非空时翻转和获取行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我一直在努力解决一个大问题,只是不知道如何才能做到。。。因此,感谢您的SQL专家提供的任何帮助 我现在有一张这样的桌子: Sticker Price Cash Price Credit Price Value Yes Yes NULL 107 NULL Yes NULL 115 Yes Yes
Sticker Price Cash Price Credit Price Value
Yes Yes NULL 107
NULL Yes NULL 115
Yes Yes NULL 127
我需要做的是构造一个表(翻转)来显示:
Text Value IsDefault
Sticker Price Sticker 1
Cash Price Cash 0
并且不显示信用价格,因为第一个表中的所有值都为空
基本上我只想在不全是空的情况下展示标签,如果不全是空的情况下展示现金,等等
我想到了pivot,但我的头就是绕不过去
目前,我有以下内容可供参考:
SELECT SH1.[Sticker Price], SH1.[Credit Price], SH1.[Cash Price], SH1.[Credit Price], UG.Description as Value,
CASE ROW_NUMBER() OVER(ORDER BY UG.Description)
WHEN 1 THEN 1 ELSE 0 END as ISDEFAULT
FROM [uStore].[dbo].[ACL_UserGroup] UG
INNER JOIN [uStore].[dbo].[ACL_UserGroupMembership] UGM ON UG.UserGroupId = UGM.UserGroupId
INNER JOIN [XMPDBHDS].[XMPieHDSSchema60].[Sheet1] SH1 ON CONVERT(nvarchar(100), SH1.[Centre Code]) = UG.Description
WHERE UGM.UserId = 1012
我只是不知道如何用我有限的SQL知识从这里得到我想要的表…在这种情况下,您应该执行
左连接
SELECT SH1.[Sticker Price], SH1.[Credit Price],
SH1.[Cash Price],
SH1.[Credit Price],
UG.Description as Value,
CASE ROW_NUMBER() OVER(ORDER BY UG.Description) WHEN 1 THEN 1 ELSE 0
END as ISDEFAULT
FROM [uStore].[dbo].[ACL_UserGroup] UG
LEFT JOIN [uStore].[dbo].[ACL_UserGroupMembership] UGM
ON UG.UserGroupId = UGM.UserGroupId
LEFT JOIN [XMPDBHDS].[XMPieHDSSchema60].[Sheet1] SH1
ON CONVERT(nvarchar(100), SH1.[Centre Code]) = UG.Description
WHERE UGM.UserId = 1012
AND SH1.[Credit Price] IS NOT NULL
AND UGM.UserGroupId IS NOT NULL;
最后我幸运地使用了pivot:
SELECT DISTINCT [Text], SUBSTRING([Text], 1, CHARINDEX(' ', [Text])) as Value,
CASE ROW_NUMBER() OVER(ORDER BY [Text])
WHEN 1 THEN 1 ELSE 0 END as ISDEFAULT
FROM
( SELECT SH1.[Sticker Price], SH1.[Credit Price], SH1.[Cash Price], UG.Description
FROM [uStore].[dbo].[ACL_UserGroup] UG
INNER JOIN [uStore].[dbo].[ACL_UserGroupMembership] UGM ON UG.UserGroupId = UGM.UserGroupId
INNER JOIN [XMPDBHDS].[XMPieHDSSchema60].[Sheet1] SH1 ON CONVERT(nvarchar(100), SH1.[Centre Code]) = UG.Description
WHERE UGM.UserId = @UserID) U
UNPIVOT
(Details FOR [Text] IN ([Sticker Price], [Credit Price], [Cash Price] )
)AS unpvt group by [Text]
结果 请格式化SQL代码,将其缩进四个空格。或者选择代码并按ctrl-k
。如果我们知道您使用的是什么RDBMS(SQL Server、Oracle、Postgres、MySQL),可能会有所帮助。此外,很难看出您的第二个表与第一个表之间的关系。谢谢您,先生,我现在已经缩进了代码。我使用的是MSSQL 2008。基本上,第二个表需要在文本列中显示第一个表中的列的名称,但前提是该列不包含第一个表中的所有空值(如果有意义的话)。。。e、 g.A B C | Yes Null Yes | Null Null Yes我需要将上述内容转换为:文本值| A“某些文本”| C“某些其他文本”跳过B,因为它在第一个表中不包含任何值。。。这些值只是我输入的字符串,用于表示要在另一个表中使用的A、B和C。谢谢您好,Rahul,谢谢您的建议,但这仍然给了我一个表格的格式:贴纸价格-信用价格-现金价格-信用价格-价值-IsDefault没有价值。。。我想“flip”这个表,如果原始表中的所有行都不是空的,那么只显示price类型,如果这有意义的话