select a.*,b.餐次名称
from 消费记录表 a
left join 餐次表 b on convert(varchar(5),a.消费时间,108) between b.开始时间 and b.结束时间试下,这样关联查询有什么问题吗

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-12-02 15:31:44
    -- Version:
    --      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
    -- Dec 28 2012 20:23:12 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
    --
    ----------------------------------------------------------------
    --> 测试数据:[T1]
    if object_id('[T1]') is not null drop table [T1]
    go 
    create table [T1]([EMPID] varchar(5),[EMPNAME] varchar(4),[TOLLDATETIME] datetime)
    insert [T1]
    select '00001','张三','2013-11-10 18:30:30' union all
    select '00002','李四','2013-11-09 11:55:20' union all
    select '00003','王五','2013-11-08 22:20:25' union all
    select '00004','赵六','2013-11-08 07:30:21'
    --> 测试数据:[T2]
    if object_id('[T2]') is not null drop table [T2]
    go 
    create table [T2]([TOLLNAME] varchar(4),[STARTTIME] VARCHAR(5) ,[ENDTIME] VARCHAR(5) )
    insert [T2]
    select '早餐','07:00','08:30' union all
    select '午餐','10:30','12:00' union all
    select '晚餐','17:00','20:00'
    --------------开始查询--------------------------
    select t1.*,ISNULL( t2.tollname,'其他时段')餐次类型
    from [T1] left JOIN [t2] on CONVERT(VARCHAR(5),t1.[TOLLDATETIME],108) BETWEEN CONVERT(VARCHAR(5),[t2].[STARTTIME]) AND CONVERT(VARCHAR(5),[t2].[ENDTIME])
    ----------------结果----------------------------
    /* 
    EMPID EMPNAME TOLLDATETIME            餐次类型
    ----- ------- ----------------------- ----
    00001 张三      2013-11-10 18:30:30.000 晚餐
    00002 李四      2013-11-09 11:55:20.000 午餐
    00003 王五      2013-11-08 22:20:25.000 其他
    00004 赵六      2013-11-08 07:30:21.000 早餐*/
      

  2.   

    非常感谢DBA_Huangzj 这么短时间回复,还未测试,先深表感谢,恳请加个还有,菜鸟程序员,日后还请求指点
      

  3.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-12-02 15:31:44
    -- Version:
    --      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
    --    Dec 28 2012 20:23:12 
    --    Copyright (c) Microsoft Corporation
    --    Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
    --
    ----------------------------------------------------------------
    --> 测试数据:[T1]
    if object_id('[T1]') is not null drop table [T1]
    go 
    create table [T1]([EMPID] varchar(5),[EMPNAME] varchar(4),[TOLLDATETIME] datetime)
    insert [T1]
    select '00001','张三','2013-11-10 18:30:30' union all
    select '00002','李四','2013-11-09 11:55:20' union all
    select '00003','王五','2013-11-08 22:20:25' union all
    select '00004','赵六','2013-11-08 07:30:21'
    --> 测试数据:[T2]
    if object_id('[T2]') is not null drop table [T2]
    go 
    create table [T2]([TOLLNAME] varchar(4),[STARTTIME] VARCHAR(5) ,[ENDTIME] VARCHAR(5) )
    insert [T2]
    select '早餐','07:00','08:30' union all
    select '午餐','10:30','12:00' union all
    select '晚餐','17:00','20:00'
    --------------开始查询--------------------------
     
     
    select t1.*,CASE WHEN t2.tollname IS NULL THEN '其他时段' ELSE  t2.tollname END 餐次类型
    from [T1] left JOIN [t2] on CONVERT(VARCHAR(5),t1.[TOLLDATETIME],108) BETWEEN CONVERT(VARCHAR(5),[t2].[STARTTIME]) AND CONVERT(VARCHAR(5),[t2].[ENDTIME])
    ----------------结果----------------------------
    /* 
    EMPID EMPNAME TOLLDATETIME            餐次类型
    ----- ------- ----------------------- --------
    00001 张三      2013-11-10 18:30:30.000 晚餐
    00002 李四      2013-11-09 11:55:20.000 午餐
    00003 王五      2013-11-08 22:20:25.000 其他时段
    00004 赵六      2013-11-08 07:30:21.000 早餐 
    */