我有一張表格,其中包含一些需要在屏幕上以特定格式顯示的數據。這在SQL中可能嗎?
表結構如下:
CREATE TABLE [dbo].[JobSheet](
[JobSheetID] [bigint] IDENTITY(1,1) NOT NULL,
[SheetNumber] [bigint] NULL,
[JobSheetDate] [datetime] NULL,
[ContractID] [bigint] NULL,
[ContractCode] [varchar](50) NULL,
[ContractTitle] [varchar](100) NULL,
[ProjectID] [bigint] NULL,
[ProjectCode] [varchar](50) NULL,
[ProjectTitle] [varchar](100) NULL,
[JobID] [bigint] NULL,
[JobCode] [varchar](50) NULL,
[JobTitle] [varchar](100) NULL,
[SageDatabaseID] [bigint] NULL,
[SageDatabaseName] [varchar](50) NULL,
[EnteredByID] [bigint] NULL,
[EnteredByUsername] [varchar](50) NULL,
[DocumentStatus] [varchar](50) NULL,
[Deleted] [bit] NULL,
[Reference] [varchar](50) NULL,
[UpdatedDate] [datetime] NULL,
[UpdatedUser] [varchar](50) NULL,
[SentToSage] [bit] NULL,
[UpdateStatus] [varchar](50) NULL,
CONSTRAINT [PK_JobSheet] PRIMARY KEY CLUSTERED
(
[JobSheetID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[JobSheetLine](
[JobSheetLineID] [bigint] IDENTITY(1,1) NOT NULL,
[JobSheetID] [bigint] NULL,
[LineType] [varchar](50) NULL,
[TSHumanResourceID] [bigint] NULL,
[SageDatabaseID] [bigint] NULL,
[Surname] [varchar](50) NULL,
[Initial] [varchar](1) NULL,
[TimeOn] [datetime] NULL,
[TimeOff] [datetime] NULL,
[Deleted] [bit] NULL,
[B1] [decimal](18, 5) NULL,
[B15] [decimal](18, 5) NULL,
[B2] [decimal](18, 5) NULL,
[HB] [decimal](18, 5) NULL,
[S1] [decimal](18, 5) NULL,
[S15] [decimal](18, 5) NULL,
[S2] [decimal](18, 5) NULL,
[HS] [decimal](18, 5) NULL,
[O1] [decimal](18, 5) NULL,
[T] [decimal](18, 5) NULL,
[TS] [decimal](18, 5) NULL,
[TT] [decimal](18, 5) NULL,
[TP] [decimal](18, 5) NULL,
[OT] [decimal](18, 5) NULL,
[OS] [decimal](18, 5) NULL,
[D] [decimal](18, 5) NULL,
[POA] [decimal](18, 5) NULL,
[PT1] [decimal](18, 5) NULL,
[PT2] [decimal](18, 5) NULL,
[CustomCostRate1] [decimal](18, 5) NULL,
[CustomCostRate1ID] [bigint] NULL,
[CustomCostRate2] [decimal](18, 5) NULL,
[CustomCostRate2ID] [bigint] NULL,
[CustomCostRate3] [decimal](18, 5) NULL,
[CustomCostRate3ID] [bigint] NULL,
[CustomCostRate4] [decimal](18, 5) NULL,
[CustomCostRate4ID] [bigint] NULL,
[CustomCostRate5] [decimal](18, 5) NULL,
[CustomCostRate5ID] [bigint] NULL,
[CustomCostRate6] [decimal](18, 5) NULL,
[CustomCostRate6ID] [bigint] NULL,
[UpdatedDate] [datetime] NULL,
[UpdatedUser] [varchar](50) NULL,
[RejectReason] [varchar](255) NULL,
[CurrentStepApprovalCount] [bigint] NULL,
[CustomRouteID] [bigint] NULL,
[CustomRoute] [bit] NULL,
[CurrentStep] [bigint] NULL,
[WaitingForType] [varchar](50) NULL,
[WaitingForID] [bigint] NULL,
[RequestedByID] [bigint] NULL,
[LineStatus] [varchar](50) NULL,
CONSTRAINT [PK_JobSheetLine] PRIMARY KEY CLUSTERED
(
[JobSheetLineID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
的數據輸入這樣的屏幕可以顯示JobSheetLineTable更好的格式上:
所需的格式,我需要得到數據輸出如下所示:
數據需要由員工過濾(RequestedByID在JobSheetLine ta )和每個唯一的合同和項目以及成本費率(成本費率從B1,B15,B2等一直運行到CustomCostRate6)。
每個成本費率的總小時數需要每天計算。
我已經得到儘可能下面的查詢,直到我relized這是行不通的。我認爲問題是由於成本比率是JobSheetLine表中的Columns導致的,但所需的輸出將成本率作爲單個列,速率和值顯示在行中。
我在SQL中使用PIVOT關鍵字進行了研究,但我無法弄清楚我在做什麼。
這裏是我的查詢想出到目前爲止(這不會工作)
DECLARE @Deleted AS BIT
DECLARE @RequestedByID AS BIGINT
DECLARE @WeekStartDate AS DATETIME
DECLARE @WeekEndDate AS DATETIME
DECLARE @WaitingForUserID AS BIGINT
DECLARE @WaitingForUserTypeID AS BIGINT
DECLARE @WaitingForTypeUser AS VARCHAR(50)
DECLARE @WaitingForTypeUserType AS VARCHAR(50)
SET @Deleted = 0
SET @RequestedByID = 2
SET @WeekStartDate = '2011/05/23 00:00'
SET @WeekEndDate = '2011/05/29 00:00'
SELECT
[JobSheet].[JobSheetDate],
[JobSheet].[ContractID],
[JobSheet].[ContractCode],
[JobSheet].[ContractTitle],
[JobSheet].[ProjectID],
[JobSheet].[ProjectCode],
[JobSheet].[ProjectTitle],
[JobSheet].[JobID],
[JobSheet].[JobCode],
[JobSheet].[JobTitle],
[JobSheet].[SageDatabaseID],
ISNULL(SUM([JobSheetLine].[B1]),0) AS B1,
ISNULL(SUM([JobSheetLine].[B15]),0) AS B15,
ISNULL(SUM([JobSheetLine].[B2]),0) AS B2,
ISNULL(SUM([JobSheetLine].[HB]),0) AS HB,
ISNULL(SUM([JobSheetLine].[S1]),0) AS S1,
ISNULL(SUM([JobSheetLine].[S15]),0) AS S15,
ISNULL(SUM([JobSheetLine].[S2]),0) AS S2,
ISNULL(SUM([JobSheetLine].[HS]),0) AS HS,
ISNULL(SUM([JobSheetLine].[O1]),0) AS O1,
ISNULL(SUM([JobSheetLine].[T]),0) AS T,
ISNULL(SUM([JobSheetLine].[TS]),0) AS TS,
ISNULL(SUM([JobSheetLine].[TT]),0) AS TT,
ISNULL(SUM([JobSheetLine].[TP]),0) AS TP,
ISNULL(SUM([JobSheetLine].[OT]),0) AS OT,
ISNULL(SUM([JobSheetLine].[OS]),0) AS OS,
ISNULL(SUM([JobSheetLine].[D]),0) AS D,
ISNULL(SUM([JobSheetLine].[POA]),0) AS POA,
ISNULL(SUM([JobSheetLine].[PT1]),0) AS PT1,
ISNULL(SUM([JobSheetLine].[PT2]),0) AS PT2,
ISNULL(SUM([JobSheetLine].[CustomCostRate1]),0) AS CustomCostRate1,
ISNULL(SUM([JobSheetLine].[CustomCostRate2]),0) AS CustomCostRate2,
ISNULL(SUM([JobSheetLine].[CustomCostRate3]),0) AS CustomCostRate3,
ISNULL(SUM([JobSheetLine].[CustomCostRate4]),0) AS CustomCostRate4,
ISNULL(SUM([JobSheetLine].[CustomCostRate5]),0) AS CustomCostRate5,
ISNULL(SUM([JobSheetLine].[CustomCostRate6]),0) AS CustomCostRate6,
ISNULL(SUM([JobSheetLine].[B1] +
[JobSheetLine].[B15] +
[JobSheetLine].[B2] +
[JobSheetLine].[HB] +
[JobSheetLine].[S1] +
[JobSheetLine].[S15] +
[JobSheetLine].[S2] +
[JobSheetLine].[HS] +
[JobSheetLine].[O1] +
[JobSheetLine].[T] +
[JobSheetLine].[TS] +
[JobSheetLine].[TT] +
[JobSheetLine].[TP] +
[JobSheetLine].[OT] +
[JobSheetLine].[OS] +
[JobSheetLine].[D] +
[JobSheetLine].[POA] +
[JobSheetLine].[PT1] +
[JobSheetLine].[PT2] +
[JobSheetLine].[CustomCostRate1] +
[JobSheetLine].[CustomCostRate2] +
[JobSheetLine].[CustomCostRate3] +
[JobSheetLine].[CustomCostRate4] +
[JobSheetLine].[CustomCostRate5] +
[JobSheetLine].[CustomCostRate6]),0) AS TotalHours
FROM [JobSheet]
INNER JOIN [JobSheetLine]
ON [JobSheetLine].[JobSheetID]=[JobSheet].[JobSheetID]
WHERE
[JobSheet].[Deleted][email protected]
AND [JobSheet].[JobSheetDate] >= @WeekStartDate
AND [JobSheet].[JobSheetDate] <= @WeekEndDate
AND [JobSheetLine].[Deleted][email protected]
AND [JobSheetLine].[RequestedByID][email protected]
GROUP BY
[JobSheet].[JobSheetDate],
[JobSheet].[ContractID],
[JobSheet].[ContractCode],
[JobSheet].[ContractTitle],
[JobSheet].[ProjectID],
[JobSheet].[ProjectCode],
[JobSheet].[ProjectTitle],
[JobSheet].[JobID],
[JobSheet].[JobCode],
[JobSheet].[JobTitle],
[JobSheet].[SageDatabaseID]
是否可以達到我想要的數據結構的輸出,因爲它是在時刻?我寧願在SQL中做所有的計算,因爲它的速度更快,但我可以在C#中進行一些計算,因爲這是一個asp.net項目。
發佈架構中不存在「所需輸出」的列(除了我猜測ProjectId = Project)? – JNK 2011-06-01 12:18:41
我對你的報告中列出的任何人感到抱歉。誰能以7.51英鎊/小時的速度生存下去? :-) – 2011-06-01 12:21:22
@JNK - 我所提到的costt匯率(B1,b15,b2等)應作爲行顯示在所需輸出的Pay Code列中(如果您查看屏幕截圖,您實際上可以看到成本率)是我所有的工作以及 – WraithNath 2011-06-01 12:23:10