读书人

生手求解。

发布时间: 2012-12-16 12:02:32 作者: rapoo

新手求解。。
例如我现在有一个列
fNumber
DN
DN.TS
DN.BJB
DN.TS.ZJ
DN.TS.ZJ.ZB
这样子

然后我想新建一个列 fLevel
变成
fNumber fLevel
DN 1
DN.TS 2
DN.BJB 2
DN.TS.ZJ 3
DN.TS.ZJ.ZB 4

可以理解为根据.来判断
所以我想请教下
要怎么写 才可以自动生成?谢谢了
在线等

[最优解释]

IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL 
DROP TABLE #Ta

CREATE TABLE #Ta(fNumber varchar(16))

INSERT INTO #Ta(fNumber)
SELECT 'DN' UNION ALL
SELECT 'DN.TS' UNION ALL
SELECT 'DN.BJB' UNION ALL
SELECT 'DN.TS.ZJ' UNION ALL
SELECT 'DN.TS.ZJ.ZB'

select *,(select COUNT(*)+1 from master..spt_values
WHERE type='P'
and SUBSTRING(fNumber,number,1)='.')
from #ta a

[其他解释]
IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL 
DROP TABLE #Ta

CREATE TABLE #Ta(fNumber varchar(16))

INSERT INTO #Ta(fNumber)
SELECT 'DN' UNION ALL
SELECT 'DN.TS' UNION ALL
SELECT 'DN.BJB' UNION ALL
SELECT 'DN.TS.ZJ' UNION ALL
SELECT 'DN.TS.ZJ.ZB'

select *,(select COUNT(*)+1 from master..spt_values
WHERE type='P' and LEN(a.fNumber)>=number
and SUBSTRING(fNumber,number,1)='.')
from #ta a

[其他解释]
引用:
SQL code?1234567891011121314151617181920212223242526272829IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL DROP TABLE #Ta CREATE TABLE #Ta(fNumber varchar(16)) INSERT INTO #Ta(fNumber)SELECT '……


那如果不是更新表
而是新建一个表
然后根据id循环 增加fNumer 然后在每次循环中检测fNumber的值 自动添加fLevel
请问 怎么做?
[其他解释]

IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL
DROP TABLE #Ta

CREATE TABLE #Ta(fNumber varchar(16))

INSERT INTO #Ta(fNumber)
SELECT 'DN' UNION ALL
SELECT 'DN.TS' UNION ALL
SELECT 'DN.BJB' UNION ALL
SELECT 'DN.TS.ZJ' UNION ALL
SELECT 'DN.TS.ZJ.ZB'

ALTER TABLE #Ta ADD fLevel int

UPDATE #Ta
SET fLevel = LEN(fNumber) - LEN(REPLACE(fNumber,'.','')) + 1



SELECT * FROM #Ta

fNumber fLevel
---------------- -----------
DN 1
DN.TS 2
DN.BJB 2
DN.TS.ZJ 3
DN.TS.ZJ.ZB 4

(5 行受影响)


[其他解释]
引用:
SQL code?12345678910111213141516IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL DROP TABLE #Ta CREATE TABLE #Ta(fNumber varchar(16)) INSERT INTO #Ta(fNumber)SELECT 'DN' UNION ALL SELECT '……


那如果不是更新表
而是新建一个表
然后根据id循环 增加fNumer 然后在每次循环中检测fNumber的值 自动添加fLevel
请问 怎么做?
[其他解释]
新手,求教导
[其他解释]
 SELECT *,len(fnumber)-len(replace(fnumber,'.',''))+1  as  flevel FROM #ta

[其他解释]
null
[其他解释]
null

读书人网 >SQL Server

热点推荐