とにかく私のタイトルが誤解を招く場合はお詫び申し上げます。私が問題を抱えているものの正確な説明的なタイトルを考え出すのに苦労しました。
SQL Server2008R2から引き出す必要のあるデータがいくつかあります。C#ASP.Netを使用してこのデータをGridViewに出力しようとしています。
単一のクエリを使用して必要なすべてのデータを引き出す方法があるかどうかを確認しようとしています。私は自分のセットアップを説明し、私が何を意味するのかを示すために最善を尽くします:
2つのテーブルがあり、構造とデータの例を以下に示します。
表:料金
int nvarchar nvarchar decimal nvarchar nvarchar nvarchar
ID Location_Code_A Location_Code_B Rate EffectiveRateDate_YYMMDD TerminationRateDate_YYMMDD Classificaton
54 123456 456789 400 110801 999999 C
55 123456 456789 885.3 110801 999999 D
56 123456 456789 901.75 110801 999999 T
57 123456 456789 407.5 120501 120630 C
58 123456 456789 850 120501 120630 D
59 123456 456789 898 120501 120630 T
60 123456 987654 325 110801 999999 C
61 123456 987654 345.5 120501 120630 C
表:追跡
int nvarchar nvarchar nvarchar nvarchar nvarchar
ID TrackCode Location_Code_A Location_Code_B DepartureDate_YYMMDD Classification
7 124FWDSE48W621543 123456 456789 111025 C
8 124FWDSE48W621544 123456 456789 111025 C
9 124FWDSE48W621545 123456 456789 111025 C
10 124FWDSE48W621546 123456 456789 111025 D
11 124FWDSE48W621547 123456 456789 111025 D
12 124FWDSE48W621548 123456 456789 111028 T
13 124FWDSE48W621549 123456 456789 111025 C
14 124FWDSE48W621550 123456 456789 111125 C
15 124FWDSE48W621551 123456 456789 120525 D
16 124FWDSE48W621552 123456 456789 120526 C
17 124FWDSE48W621553 123456 987654 110927 C
18 124FWDSE48W621554 123456 987654 111027 C
19 124FWDSE48W621555 123456 987654 111027 C
20 124FWDSE48W621556 123456 987654 120514 C
21 124FWDSE48W621557 123456 987654 120515 C
22 124FWDSE48W621558 123456 987654 120515 C
Tracking.TrackCode
私が達成したいのは、 (s)でカウントを引き出しTracking.Location_Code
、これにを掛けてRates.Rate
合計を求めTracking.DepartureDate_YYMMDD
、レートの発効日と終了日の間にあるグループ化されたクエリです。分類は、正しいレートを使用することを確認する役割を果たしますが、実際の最終的なGridViewでは役割を果たしません。
したがって、GridViewの結果は次のようになります。
Location_A Location_B TotalTrackCodes RateTotal
123456 456789 10 5522.35
123456 987654 6 2011.5
Rates.EffectiveRateDate
レートのdepartureDateが&の2つの異なるレコードの間にある場合に、私の問題が発生することがわかりますRates.TerminationRateDate
。これが発生した場合、最新のレート情報、基本的には最新のRates.EffectiveRateDate(intに変換された場合の最高のEffectiveRateDate)を持つ情報を取得したいと思います。
EffectiveRateDatesは日付形式ではないため、クエリでintに変換し、チェックなどを行う代わりに一種の範囲として使用します。このように正常に機能しているようです。
正しい結果を得るために、DataSetとしてGridViewに渡すことができる単一のクエリを実行することは可能ですか?
注として、私はこれらのテーブル/フォーマットなどを作成しませんでした。これらはすでにサードパーティによって入力されており、これらのテーブルをクエリしようとしているため、テーブル自体を調整することはできません。
助けてくれてありがとう。
時間を節約し、ヘルプを支援するために、各テーブルとそのデータの内容のSQLダンプについて以下を参照してください。
/****** Object: Table [dbo].[Tracking] Script Date: 08/21/2012 14:03:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tracking](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TrackCode] [nvarchar](50) NULL,
[Location_Code_A] [nvarchar](50) NULL,
[Location_Code_B] [nvarchar](50) NULL,
[DepartureDate_YYMMDD] [nvarchar](50) NULL,
[Classification] [nvarchar](50) NULL,
CONSTRAINT [PK_Tracking] PRIMARY KEY CLUSTERED
(
[ID] 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
SET IDENTITY_INSERT [dbo].[Tracking] ON
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (1, N'124FWDSE48W621543', N'123456', N'456789', N'111025', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (2, N'124FWDSE48W621544', N'123456', N'456789', N'111025', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (3, N'124FWDSE48W621545', N'123456', N'456789', N'111025', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (4, N'124FWDSE48W621546', N'123456', N'456789', N'111025', N'D')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (5, N'124FWDSE48W621547', N'123456', N'456789', N'111025', N'D')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (6, N'124FWDSE48W621548', N'123456', N'456789', N'111028', N'T')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (7, N'124FWDSE48W621549', N'123456', N'456789', N'111025', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (8, N'124FWDSE48W621550', N'123456', N'456789', N'111025', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (9, N'124FWDSE48W621551', N'123456', N'456789', N'120525', N'D')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (10, N'124FWDSE48W621552', N'123456', N'456789', N'120526', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (11, N'124FWDSE48W621553', N'123456', N'987654', N'110927', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (12, N'124FWDSE48W621554', N'123456', N'987654', N'111027', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (13, N'124FWDSE48W621555', N'123456', N'987654', N'111027', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (14, N'124FWDSE48W621556', N'123456', N'987654', N'120514', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (15, N'124FWDSE48W621557', N'123456', N'987654', N'120515', N'C')
INSERT [dbo].[Tracking] ([ID], [TrackCode], [Location_Code_A], [Location_Code_B], [DepartureDate_YYMMDD], [Classification]) VALUES (16, N'124FWDSE48W621558', N'123456', N'987654', N'120515', N'C')
SET IDENTITY_INSERT [dbo].[Tracking] OFF
/****** Object: Table [dbo].[Rates] Script Date: 08/21/2012 14:03:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Rates](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Location_Code_A] [nvarchar](50) NULL,
[Location_Code_B] [nvarchar](50) NULL,
[Rate] [nvarchar](50) NULL,
[EffectiveRateDate_YYMMDD] [nvarchar](50) NULL,
[TerminationRateDate_YYMMDD] [nvarchar](50) NULL,
[Classification] [nvarchar](50) NULL,
CONSTRAINT [PK_Rates] PRIMARY KEY CLUSTERED
(
[ID] 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
SET IDENTITY_INSERT [dbo].[Rates] ON
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (1, N'123456', N'456789', N'400', N'110801', N'999999', N'C')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (2, N'123456', N'456789', N'885.3', N'110801', N'999999', N'D')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (3, N'123456', N'456789', N'901.75', N'110801', N'999999', N'T')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (4, N'123456', N'456789', N'407.5', N'120501', N'120630', N'C')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (5, N'123456', N'456789', N'850', N'120501', N'120630', N'D')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (6, N'123456', N'456789', N'898', N'120501', N'120630', N'T')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (7, N'123456', N'987654', N'325', N'110801', N'999999', N'C')
INSERT [dbo].[Rates] ([ID], [Location_Code_A], [Location_Code_B], [Rate], [EffectiveRateDate_YYMMDD], [TerminationRateDate_YYMMDD], [Classification]) VALUES (8, N'123456', N'987654', N'345.5', N'120501', N'120630', N'C')
SET IDENTITY_INSERT [dbo].[Rates] OFF