小编Kie*_*ith的帖子

内部连接表但仅从一个表中选择

我有两个表连接,以便我可以比较一个字段并从一个表中提取记录,其中被比较的字段不在两个表中:

Table A
---------
Comp   Val
111    327
112    234
113    265
114    865


Table B
-----------
Comp2   Val2
111     7676
112     5678
Run Code Online (Sandbox Code Playgroud)

所以我正在做的是在Comp-Comp2上连接两个表,然后我希望从表A中选择表B中不存在corrssponding Comp的所有值.在这种情况下,查询应该导致:

Result
---------
Comp   Val
113    265
114    865
Run Code Online (Sandbox Code Playgroud)

这是查询:

select * into Result from TableA
inner join TableB
on (TableB.Comp2 = TableA.Comp)
where TableB.Comp2 <> TableA.Comp
Run Code Online (Sandbox Code Playgroud)

问题是,它从两个表中提取值.有没有办法单独从TableA中选择值而不明确指定字段?

sql sql-server sql-server-2008

5
推荐指数
3
解决办法
5956
查看次数

在SQL查询中实现循环逻辑

我试图在SQL查询中实现一些逻辑来创建一个类似于以下的表:

CountNum  Identifier
20         a
40         a
60         a
20         b
40         b
20         c
20         d
40         d
20         e
40         e
60         e
80         e
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,逻辑是这样的,只要Identifer保持不变,CountNum就会向下一条记录添加20.如果标识符发生变化,则从20开始.

到目前为止,我已经实现了以下伪代码:

Do the following for all records:
Update table set CountNum=20 for first Identifier
If Identifier is duplicated, add 20 to CountNum for each duplicate.
Run Code Online (Sandbox Code Playgroud)

无论如何在SQL服务器中实现这个作为查询?

我也试图将结果移动到一个新表中.我试过了:

INSERT INTO tblPayments select Identifier AS PaymentsIdentifier
ROW_NUMBER() OVER(PARTITION BY Identifier ORDER BY Identifier)*20 CountNum
FROM dbo.oldPayments
Run Code Online (Sandbox Code Playgroud)

但是它会生成错误:

Column name or number of supplied values …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

2
推荐指数
1
解决办法
83
查看次数

必须声明标量变量日期以防万一

我正在尝试用一年中几个月的当前期间更新一列。因此,我使用带有月份变量的 switch 语句。但是,我收到错误:

必须声明标量变量

我尝试了以下方法:

DECLARE @DATE_AP dateTime
DECLARE @month varchar(max)

SET @DATE_AP= DATEADD(year, 0, GETDATE())
SET @month_AP = DATENAME(Month, @DATE_AP)
SELECT CAST(@month as VARchar(10))

 select @periodsetvar = 'select CASE @month 

     when    ''October'' then 
     ''Update tbltimes set Periodyr = 01''

     when    ''November'' then 
     ''Update tbltimes set Periodyr  = 02''

     when    ''December'' then 
    ''Update tbltimes set Periodyr  = 03''

     when    ''January'' then 
    ''Update tbltimes set Periodyr  = 04''

     when    ''February'' then 
     ''Update tbltimes set Periodyr  = 05''

END'

exec (@periodsetvar)
Run Code Online (Sandbox Code Playgroud)

和: …

sql sql-server stored-procedures sql-server-2008

0
推荐指数
1
解决办法
4731
查看次数

设置静态日和上个月GETDATE()SQL

以下SQL语句设置特定列的日期:

DATEDUE=convert(varchar,GETDATE(),103 )
Run Code Online (Sandbox Code Playgroud)

但是,它设置了当前日期,例如05/08/2015.我想做的是将它设置为相同的dd/mm/yyyy格式,但将日期设置为15日,将月份设置为上个月,因此05/08/2015应该是15/07/2015.

sql sql-server sql-server-2008

0
推荐指数
1
解决办法
527
查看次数