假设我在SQL Server数据库中有两个表(Emp和EmpCopy),其中包含以下数据:
案例1:数据Emp和EmpCopy表格如下:
Table: Emp
Id Name
-----------------
1 Emp_Name
2 Emp_Age
3 Emp_City
Run Code Online (Sandbox Code Playgroud)
表:EmpCopy
Id Name
--------------------
1 Emp_Name
2 Emp_Age
Run Code Online (Sandbox Code Playgroud)
案例2:Emp和EmpCopy表中的数据如下所示:
Table: Emp
Id Name
--------------------
1 Emp_Name
2 Emp_Age
Table: EmpCopy
Id Name
---------------------
1 Emp_Name
2 Emp_Age
3 Emp_City
Run Code Online (Sandbox Code Playgroud)
现在根据上面给出的情况,我想从两个表中检索记录,就像下面给出的一样
情况1:
Id Emp_Column EmpCopy_Column
1 Emp_Name Emp_Name
2 Emp_Age Emp_Age
3 Emp_City NULL
Run Code Online (Sandbox Code Playgroud)
案例2:
Id Emp_Column EmpCopy_Column
1 Emp_Name Emp_Name
2 Emp_Age Emp_Age
3 NULL Emp_City
Run Code Online (Sandbox Code Playgroud) 我不能使用公用表表达式:
WITH cte
AS (SELECT [StationID],
[LastDistribution]
FROM [DB1].[dbo].[ProcessingStations]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB2].[dbo].[ProcessingStations]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB3].[dbo].[ProcessingStations]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB4].[dbo].[ProcessingStations]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB5].[dbo].[ProcessingStations]
ORDER BY [StationID]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB6].[dbo].[ProcessingStations]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB7].[dbo].[ProcessingStations]
UNION ALL
SELECT [StationID],
[LastDistribution]
FROM [DB8].[dbo].[ProcessingStations])
SELECT *
FROM cte
ORDER BY StationID
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
sql sql-server sql-order-by common-table-expression sql-server-2008
在Oracle中,我们可以使用
FOR employee_rec in (select id from mytbl)
LOOP
DBMS_OUTPUT.PUT_LINE(employee_rec.id);
END LOOP;
Run Code Online (Sandbox Code Playgroud)
在SQL Server中,我们有类似的东西吗?如果没有,如何进行此循环?
我有一张员工表,工资根据年数如下:
Employee_table
-----------------------------------------------------------------------------
emp_ID - FirstName- LstName salary ... year -
001 - xx - yy - 03212 2000
001 - xx - yy - 04212 2001
002 - xxx - yyy - 03425 2000
002 - xxx - yyy - 04425 2001
003 - xxxx - yyyy - 03429 2000
003 - xxxx - yyyy - 04429 2001
------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我想写一个查询,它会在列方面给我一年的员工数据:
tblResults
---------------------------------------------------------------------
emp_ID 2000 2001 .... ....
---------------------------------------------------------------------
01 03212 04212
02 03425 - 04425
03 03429 04429
Run Code Online (Sandbox Code Playgroud) 我刚刚在SQL 2008中创建了一个表.这个表有两列.
CREATE TABLE [dbo].[MyTable]
(
[pkey] [bigint] not null,
[Number] [int] not null
)
Run Code Online (Sandbox Code Playgroud)
现在我想在其中插入值.第一列可以从另一个表中获得dbo.OldTable.它有很多记录,我不想手动插入数据.第二列Number可以是0每行中的一列.做这个的最好方式是什么?
select o.customerid, c.customername, o.orderdate
from orders as o, customers as c
where o.orderdate='1997-08-26';
Run Code Online (Sandbox Code Playgroud)
使用示例northwind db,我无法弄清楚出了什么问题?我使用了样本表中使用的日期格式.
我正在尝试提取26日下订单的任何人的ID和姓名.
我有2个单独的查询.
查询1:
With A as (Select P,Q,R from X union all Select P,Q,R from Y)
Insert into File1
Select * from A
Run Code Online (Sandbox Code Playgroud)
查询2:
With B as (Select S,T,U from Z)
Insert into File2
Select * from B
Run Code Online (Sandbox Code Playgroud)
我意识到,从逻辑上讲,我总是需要一起生成File1和File2,所以我决定将2个查询合并为一个存储过程.但是,当我尝试这样做时,我遇到了这个问题,它只能在查询中有一个WITH子句.
所以,我在SO中发现了一些问题,其中人们解释说你只是使用逗号并且有一个单独的WITH子句(尽管没有WITH)但是这对我的例子来说不适用于任何形式.
这不是问题 - 我很容易通过使用临时表等解决它.但我真的很感兴趣为什么我不能在同一个Proc中有两个完全不相关的WITH子句?
有人可以解释一下吗?