有一字段包含数字和字符串,当是数字时,就通过嵌套语句读取另一表中对应的字符串,如果是字符串,那么就返回原字符串。数据库例子如下:
Country表
id  name
1    50
2    中国Show表id   name
50    美国
想让Country表显示如下:
id   name
1     美国
2     中国

解决方案 »

  1.   

    --> 生成测试数据表: [Country]
    IF OBJECT_ID('[Country]') IS NOT NULL
    DROP TABLE [Country]
    GO
    CREATE TABLE [Country] ([id] [int],[name] [nvarchar](10))
    INSERT INTO [Country]
    SELECT '1','50' UNION ALL
    SELECT '2','中国'--> 生成测试数据表: [Show]
    IF OBJECT_ID('[Show]') IS NOT NULL
    DROP TABLE [Show]
    GO
    CREATE TABLE [Show] ([id] [int],[name] [nvarchar](10))
    INSERT INTO [Show]
    SELECT '50','美国'--SELECT * FROM [Country]
    --SELECT * FROM [Show]-->SQL查询如下:SELECT c.id,
    name=CASE ISNUMERIC(c.name)
              WHEN 1 THEN s.name
              ELSE c.name
         END  
    FROM Country c
    LEFT JOIN Show s
    ON c.name=LTRIM(s.id)
    /*
    id          name
    ----------- ----------
    1           美国
    2           中国(2 行受影响)
    */
      

  2.   

    作一个函数判断字符可否转换为数字,再用Case .
      

  3.   

    唉,我竟然不知Sql里还有这样一个函数...
      

  4.   

    你好,htl258 ,谢谢你的sql语句,不过如果我的表Country表再多一个字段name2,也是一样的数据,那该条语句如何写呢?是不是要用多个left  join ?
      

  5.   

    select id,name from Country where id name in(select id from show)
    union 
    select a.id,b.name from Country  a,show b 
    where  a.name = b.id
      

  6.   


    --借htl258大哥代码建下表,谢谢哈
    IF OBJECT_ID('[Country]') IS NOT NULL
        DROP TABLE [Country]
    GO
    CREATE TABLE [Country] ([id] [int],[name] [nvarchar](10))
    INSERT INTO [Country]
    SELECT '1','50' UNION ALL
    SELECT '2','中国'--> 生成测试数据表: [Show]
    IF OBJECT_ID('[Show]') IS NOT NULL
        DROP TABLE [Show]
    GO
    CREATE TABLE [Show] ([id] [int],[name] [nvarchar](10))
    INSERT INTO [Show]
    SELECT '50','美国'
    SELECT id,
    CASE WHEN ISNUMERIC(c.name)=1 THEN (SELECT TOP 1 name FROM [Show] WHERE id=CAST(c.name AS INT)) ELSE c.name END AS name
    FROM COUNTRY c
    id          name
    ----------- ----------
    1           美国
    2           中国(2 row(s) affected)