从表中多次选择记录

ven*_*kat 3 sql t-sql sql-server sql-server-2008

我有一个这样的SQL语句:

编辑:

SELECT 
    location as Location 
FROM
    Table1 
WHERE 
    OnsiteOffshore = 'Offshore' AND Acc_Code = 'ABC' 

UNION 

SELECT 
    Country 
FROM 
    Table1 
WHERE
    OnsiteOffshore = 'Onsite' AND Acc_Code = 'ABC'
Run Code Online (Sandbox Code Playgroud)

此SQL查询提供以下结果:

Chennai
Bangalore
USA
NewZealand
Run Code Online (Sandbox Code Playgroud)

但由于一些要求,我需要像这样的输出:

Chennai
Chennai
Chennai
Chennai
Bangalore
Bangalore
Bangalore
Bangalore
USA
USA
USA
USA
NewZealand
NewZealand
NewZealand
NewZealand
Run Code Online (Sandbox Code Playgroud)

意思是说每个位置需要输出4次.

请帮助如何获得相同.

ype*_*eᵀᴹ 12

SELECT Location 
FROM Table1
  CROSS JOIN
    ( VALUES (1),(2),(3),(4)
    ) AS four(dummy)
Run Code Online (Sandbox Code Playgroud)

如果4不是常量但是(因为@xQbert注意/问到)是表的行数,您可以使用:

SELECT a.Location 
FROM Table1 AS a
  CROSS JOIN
     Table1 AS b
Run Code Online (Sandbox Code Playgroud)

如果您没有Table1任何(但是很复杂的)查询,则可以将其用于4个副本:

SELECT Location 
FROM (
       SELECT Location       --- complex query here
       ...                   --- inside parenthesis
     UNION 
       SELECT Country
       ...
     ) AS Table1
  CROSS JOIN
    ( VALUES (1),(2),(3),(4)
    ) AS four(dummy)
Run Code Online (Sandbox Code Playgroud)

或者这个n副本:

WITH cte AS
  ( SELECT Location       --- complex query here
    ...                   --- inside parenthesis
    UNION 
    SELECT Country
    ...
  )
SELECT a.Location 
FROM cte AS a
  CROSS JOIN
     cte AS b
Run Code Online (Sandbox Code Playgroud)


Mic*_*aga 6

在任何RDBMS中最简单且(可能)完全接受;-):

select location from (
    Select Location From Table1 union all
    Select Location From Table1 union all
    Select Location From Table1 union all
    Select Location From Table1
) t
order by location
Run Code Online (Sandbox Code Playgroud)

使用CTE(通用表格表达式)的更好方法:

;with cte (id) as (
    select 1 union all
    select id + 1 from cte where id < 4
)
select location from Table1
cross join cte
Run Code Online (Sandbox Code Playgroud)

  • 虽然我对第一个查询的诱惑为-1,但CTE为+1.:) (2认同)