Sql server 可以使用SQL以下面的方式转换数据吗?I';我甚至不确定支点会起作用
用户希望数据显示如下:Sql server 可以使用SQL以下面的方式转换数据吗?I';我甚至不确定支点会起作用,sql-server,reporting-services,crystal-reports,Sql Server,Reporting Services,Crystal Reports,用户希望数据显示如下: Tax Description ML Total Link Link Link Link Link Link Code Rate Code Rate Rate Code Rate SC001 Abbeville County, SC Y 0.07
Tax Description ML Total Link Link Link Link Link Link
Code Rate Code Rate Rate Code Rate
SC001 Abbeville County, SC Y 0.0700 SC 0.0600 SCLO1 0.0100
SC002 Aiken County, SC Y 0.0800 SC 0.0600 SCCP1 0.0100 SCEC1 0.0100
Tax Description ML Link Link
Code Rate Link Description
SC001 Abbeville County, SC Y 0.0600 SC South Carolina State
SC001 Abbeville County, SC Y 0.0100 SCLO1 Local Option 1%
SC002 Aiken County, SC Y 0.0600 SC South Carolina State
SC002 Aiken County, SC Y 0.0100 SCCP1 Capital Projects 1%
SC002 Aiken County, SC Y 0.0100 SCEC1 Education Capital Improvement
但数据存储在数据库中的方式如下:
Tax Description ML Total Link Link Link Link Link Link
Code Rate Code Rate Rate Code Rate
SC001 Abbeville County, SC Y 0.0700 SC 0.0600 SCLO1 0.0100
SC002 Aiken County, SC Y 0.0800 SC 0.0600 SCCP1 0.0100 SCEC1 0.0100
Tax Description ML Link Link
Code Rate Link Description
SC001 Abbeville County, SC Y 0.0600 SC South Carolina State
SC001 Abbeville County, SC Y 0.0100 SCLO1 Local Option 1%
SC002 Aiken County, SC Y 0.0600 SC South Carolina State
SC002 Aiken County, SC Y 0.0100 SCCP1 Capital Projects 1%
SC002 Aiken County, SC Y 0.0100 SCEC1 Education Capital Improvement
我知道如何使用pivot,但让我感到困惑的是,他们希望看到链接,然后是每个税码旁边的税率。这可能吗
我在SQLServer2012中使用SSR或CrystalReports来实现这一点。我在SQL中也做了类似的事情。这是我的代码-我没有修改它以适合您的专栏,但它应该是一个很好的起点
SELECT [report_id]
,[id]
,[label]
,[rate]
,[per_trip]
,[per_mile]
,[per_hour]
,[per_year]
FROM Table1
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @Column1Name AS NVARCHAR(MAX)
DECLARE @Column2Name AS NVARCHAR(MAX)
--Get distinct values of the PIVOT Column
SELECT @Column1Name= ISNULL(@Column1Name + ',','')
+ QUOTENAME(label + ' Column1')
FROM (SELECT DISTINCT label FROM [costmodel].[tractor_cost_report] ) AS Labels
SELECT @Column2Name= ISNULL(@Column2Name + ',','')
+ QUOTENAME(label + ' Column2')
FROM (SELECT DISTINCT label FROM [costmodel].[tractor_cost_report] ) AS Labels
--Prepare the PIVOT query using the dynamic
-- the Column Names in the query are the values of the [label] field in the rows of data
SET @DynamicPivotQuery =
N' SELECT id,
MAX([Wages and Benefits PerTrip]) as WagesBenefitsAmt,
MAX([Fuel & Oil PerTrip]) as FuelOilAmt,
MAX([Licence PerTrip]) as LicenceAmt,
MAX([Insurance PerTrip]) as InsuranceAmt,
MAX([Monthly Payment PerTrip]) as MonthlyPaymentAmt,
MAX([Profit PerTrip]) as ProfitAmt,
MAX([WCB (%) Rate]) as WCBRate,
MAX([WCB (%) PerTrip]) as WCBAmt,
MAX([EI ($) PerTrip]) as EIAmt,
MAX([CPP ($) PerTrip]) as CPPAmt,
MAX([Statutory Holiday ($) PerTrip]) as StatPayAmt,
MAX([Vacation (%) Rate]) as VacationRate,
MAX([Vacation (%) PerTrip]) as VacationAmt,
MAX([Pension ($) Rate]) as PensionRate,
MAX([Pension ($) PerTrip]) as PensionAmt
FROM (
SELECT id,
rate,
per_trip,
label + '' PerTrip'' as RowPivot1,
label + '' Rate'' as RowPivot2
FROM [Table1] ) a
PIVOT(SUM(per_trip)
FOR RowPivot1 IN (' + @Column1Name + ')) AS PVTTable1
PIVOT(SUM(rate)
FOR RowPivot2 IN (' + @Column2Name + ')) AS PVTTable2
GROUP BY id'
--Execute the Dynamic Pivot Query
print @DynamicPivotQuery
EXEC sp_executesql @DynamicPivotQuery
如果您知道链接不会超过3个,则不需要动态SQL。但是您可以修改它,以使用动态SQL添加所需的链接字段,或者您可以根据需要(或者将其放在报表页面上)放置尽可能多的链接字段
您可以在crystal reports中执行此操作
if
语句,如下所示 if taxcode=Sc001
then Description
else if taxcode=Sc002
then Description
如wise for all columns,您将获得所需的输出。查找有关dynamic pivot的问题。这是可能的,但我以前做过动态透视,但我从来没有在数据按照他们想要的方式排列的地方做过。使用dynamic pivot是否可能?是否保证链接代码不超过3个?如果是这样的话,您可以不使用pivot或动态SQL,只使用标准联接。不,有多个链接代码,超过3个。只有在我提前知道所有代码是什么的情况下,这才有效,对吗?我想让这个解决方案尽可能通用,这样无论是1个代码还是10个代码都可以运行。是的,这种方法是在crystal reports中对数据进行硬编码。。。。若我知道整个设计,那个么通用的方法可以被认为是我真的不想硬编码任何东西,若我可以避免的话。他们想要查看数据的方式与从选择查询返回数据的方式一样,都在原始问题中。