【问题标题】:convert sql server query to be used in Access database转换 sql server 查询以在 Access 数据库中使用
【发布时间】:2017-04-15 17:27:00
【问题描述】:

我发现此查询可以很好地与 SQL 服务器一起使用。 所以我很难将它移植到 Access 数据库中。字段是相同的。

Rate_Start_Date = DateTime
Rate_End_Date = DateTime
Room_Type = char
Rate = Currency
Price_List_Code = Integer

但是,sql 语法超出了我的知识范围。 有人可以帮我重写一下,让它与 Access 数据库一起使用吗?

代码:

    use MYDATABASE
DECLARE @StartDate  DATETIME,
        @EndDate    DATETIME,
        @RoomType   VARCHAR(6),
        @PriceListCode    INT
;

 SELECT @StartDate  = :a2,
        @EndDate    = :a3,
        @RoomType   = :a1,
        @PriceListCode  = :a4
;
WITH 
cteStayDates AS
( 
 SELECT RoomType  = Room_Type,
        StartDate = CASE WHEN Rate_Start_Date < @StartDate THEN @StartDate ELSE Rate_Start_Date END,
        EndDate   = CASE WHEN Rate_End_Date   > @EndDate   THEN @EndDate   ELSE Rate_End_Date   END,
        Rate
   FROM dbo.Room_Rates
  WHERE @RoomType  = Room_Type
    AND @StartDate < Rate_End_Date
    AND @EndDate  >= Rate_Start_Date
    AND @PriceListCode = PRICE_LIST_CODE
) 
 SELECT RoomType, StartDate, EndDate, Rate, 
        Days = DATEDIFF(dd,StartDate,EndDate)
             + CASE WHEN EndDate = @EndDate THEN 0 ELSE 0 END
   FROM cteStayDates
  ORDER BY StartDate
;

【问题讨论】:

  • 请从这段代码中提取查询文本,将其添加到您的问题中并描述其背后的逻辑。
  • 就像我说的,这个查询超出了我的知识范围。我不知道要提取什么。逻辑是获取选定时段的房间类型价格。
  • @IvanStarostin 的意思是——他说得很对——你应该说明你的 SQL 查询的文本,而不是把它显示为一系列 UniQuery1.SQL.Adds,因为你如何构造查询是无关紧要,UniQuery1.SQL.Adds 本身没有添加任何内容,只会让您的 q 难以阅读。

标签: sql sql-server delphi ms-access


【解决方案1】:

在 Access SQL 中应该是这样的:

PARAMETERS parmStartDate DATETIME
    ,parmEndDate DATETIME
    ,parmPriceList Short
    ,parmRoomType TEXT (6);

SELECT RoomType
    ,StartDate
    ,EndDate
    ,Price
    ,DATEDIFF("d", StartDate, EndDate) AS Days
FROM (
    SELECT Room_Type AS RoomType
        ,iif(Rate_Start_Date < parmStartDate, parmStartDate, Rate_Start_Date) AS StartDate
        ,iif(Rate_End_Date > parmEndDate, parmEndDate, Rate_End_Date) AS EndDate
        ,Price
    FROM dbo.Room_Rates
    WHERE parmRoomType = Room_Type
        AND parmPriceList = Price_List
        AND parmStartDate < Rate_End_Date
        AND parmEndDate >= Rate_Start_Date
    )
ORDER BY StartDate;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多