cav core
2316 2316
2316h 2316
現在要做一個查詢,當cav和core的內容相同時,顯示的結果為:(假設查詢結果的字段為tool)
tool
2316
而當cav和core的內容不同時,顯示的結果為:
tool
2316h 2316
應該怎麼寫sql語句阿?
請教高手。為我寫一個存儲過程或函數.
declare @t table(cav varchar(10), core varchar(10))
insert into @t
select '2316' , '2316'
union all select '2316h' , '2316'
select * from @t
select * , 结果=cav from @t where cav = core
union all
select * , 结果=cav+' '+core from @t where cav <> core
--result
cav core 结果
---------- ---------- ---------------------
2316 2316 2316
2316h 2316 2316h 2316
(所影响的行数为 2 行)
表:
CREATE TABLE [dbo].[Db_Table] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[cav] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[core] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
--////////////////////////////////////////////////////////////////////////////////
/*过程名:GetResult_Proc
*/
--////////////////////////////////////////////////////////////////////////////////
CREATE PROCEDURE GetResult_Proc
AS
Begin
--建立临时表
Declare @##t Table(
ID int,
cav char(10),--数据库中是varchar,这里用char是为了排列整齐,呵呵
core char(10)
)
--将数据插入临时表
INSERT INTO @##t SELECT * FROM Db_Table
--查询临时表
-- SELECT [ID],cav,core FROM @##t
SELECT
[ID] AS ID编号,
cav as cav的值,
core as core的值,
cav as 对比cav和core后的结果
FROM @##t
Where cav = core
Union ALL
SELECT [ID], cav,core,cav+' '+core
FROM @##t
Where cav <> core
End
--完毕
--////////////////////////////////////////////////////////////////////////////////
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
在查询分析器中执行:
EXEC GetResult_Proc