TSQL选择带别名的*

时间:2017-01-27 14:44:12

标签: sql sql-server tsql

我有一个名为" format"的列,其中包含由逗号,分隔的字符串的行。 类似的东西:

-query:

SELECT DISTINCT
  [format]
FROM 
  [mydb].[dbo].[Demand_conditions]

-result:

format                   <- column's name
,one,two,three,          <- row 1
,paper,cardboard,metal,  <- row 2

我从一个获取昏迷之间值的函数中选择所有,如:

SELECT * FROM [mydb].[dbo].splitstring(
    (SELECT DISTINCT
        [format]
    FROM 
        [mydb].[dbo].[Demand_conditions])) 

这给了我以下结果:

更新:显示的栏目名称是&#34;名称&#34;我想只是管理工作室说:&#34;你的专栏没有名字&#34;。我希望(正如我在下一个例子中所示),要调用的字符串&#34;格式&#34;。我不想在第一行中获得价值。

Name <- No column name
one
two
three
paper
cardboard
metal

我需要为上面结果的列命名:

format   <- Column name
one
two
three
paper
cardboard
metal

splitstring函数的代码:

CREATE FUNCTION [dbo].[splitstring] ( @stringToSplit VARCHAR(MAX) )
RETURNS
 @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT

 WHILE CHARINDEX(',', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(',', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList
 SELECT @stringToSplit

 RETURN
END

3 个答案:

答案 0 :(得分:4)

您的语法可能在语法上无效,因为我怀疑拆分字符串函数将表作为参数。拆分字符串函数通常只需要字符串。适当的方法是apply

您可以在表别名中指定列名。我会这样做:

SELECT distinct s.format
FROM [mydb].[dbo].[Demand_conditions] dc CROSS APPLY
     ([mydb].[dbo].splitstring(dc.[format])
     ) s(format);

s(format)命名splitstring()函数返回的列。

答案 1 :(得分:1)

这对我有用:

SELECT f.[format] from (
    SELECT * FROM [mydb].[dbo].splitstring(
        (SELECT DISTINCT
            [format]
        FROM 
            [mydb].[dbo].[Demand_conditions])) ) f([format])

答案 2 :(得分:0)

这应该有用。

SELECT * FROM [mydb].[dbo].splitstring(
(
  SELECT 'format'
  UNION
  SELECT DISTINCT
    [format]
  FROM 
    [mydb].[dbo].[Demand_conditions]))