Sql server 2005 获取格式化输出
具有如下所示的数据Sql server 2005 获取格式化输出,sql-server-2005,Sql Server 2005,具有如下所示的数据 ItemCode SalesPrice PricingLevel ITEM-000001 451.000000 Barons ITEM-000001 432.000000 Guild 是否有办法获得以下输出: ItemCode Barons Guild ITEM-000001 451 432 试试这个(注意:因为我不知道您的表名,所以我称之为“Items”): 对于不显示十进制零,请使用以下命令: SELECT DISTIN
ItemCode SalesPrice PricingLevel
ITEM-000001 451.000000 Barons
ITEM-000001 432.000000 Guild
是否有办法获得以下输出:
ItemCode Barons Guild
ITEM-000001 451 432
试试这个(注意:因为我不知道您的表名,所以我称之为“Items”):
对于不显示十进制零,请使用以下命令:
SELECT DISTINCT I1.ItemCode,
(SELECT CAST(SalesPrice AS DECIMAL(10,0)) FROM Items I2 WHERE I2.ItemCode = I1.ItemCode AND I2.PricingLevel = 'Barons') Barons,
(SELECT CAST(SalesPrice AS DECIMAL(10,0)) FROM Items I3 WHERE I3.ItemCode = I1.ItemCode AND I3.PricingLevel = 'Guild') Guild
FROM Items I1
你们有多少种不同的等级?我可以看到PricingLevel(男爵,公会)的两个值。该列表中是否还有更多项?Hi Tufo,它运行良好,但从性能角度来看,如果我有大量数据,它是否运行良好?如果您只有这些列,那么它将运行良好,整个表将有1个选择项,每个项有2个选择项,没有问题。但是如果您有更多的列,那么性能可能会有问题。您有多少PricingLevel寄存器?在该表中,我有15列,但PricingLevel是固定的,但您有多少定价级别?提高性能的一个好方法是在该表中为“PricingLevel”列创建一个额外的索引,然后为该查询创建一个视图。是的,表中已经有索引我正在视图中使用该查询非常感谢,我使用您的查询是因为我觉得它比上面的更快,因为在您的查询中只有一个select&在上面的3个select中,我觉得使用您的解决方案更好。非常感谢你。
SELECT DISTINCT I1.ItemCode,
(SELECT CAST(SalesPrice AS DECIMAL(10,0)) FROM Items I2 WHERE I2.ItemCode = I1.ItemCode AND I2.PricingLevel = 'Barons') Barons,
(SELECT CAST(SalesPrice AS DECIMAL(10,0)) FROM Items I3 WHERE I3.ItemCode = I1.ItemCode AND I3.PricingLevel = 'Guild') Guild
FROM Items I1
SELECT ItemCode,
Sum(Case when PricingLevel = 'Barons' Then SalesPrice else 0 end) as Barons,
Sum(Case when PricingLevel = 'Guild' Then SalesPrice else 0 end) as Guild
FROM myTable
GROUP BY ItemCode