首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

有关PIVOT处理空值有关问题

2013-07-04 
有关PIVOT处理空值问题各位大神请看:; 怎么可以把B2行分仓的值设为 总库存:0 在单量:0 ?我已经试过 isnu

有关PIVOT处理空值问题
各位大神请看:



; 怎么可以把B2行分仓的值设为 '总库存:0 在单量:0' ?
我已经试过 isnull() 对于QtyDetail  了,实现不了。
请问有什么方法吗? 附上代码:


CREATE TABLE #Table_Stock(
GoodId INT,
Qty INT,
QtyOut INT,
StoreName VARCHAR(32)
 )
 
  CREATE TABLE #Table_Goods(
GoodId int,
Title VARCHAR(126)
 )
 
 INSERT INTO #Table_Stock ( GoodId, Qty, QtyOut, StoreName )
SELECT 1,10,0,'总仓' UNION
SELECT 1,0,0,'分仓' UNION
SELECT 2,5,1,'总仓'

INSERT INTO #Table_Goods ( GoodId, Title )
SELECT 1,'A1' UNION
SELECT 2,'B2'
 
;WITH Stocks AS (
SELECT a.Title,StoreName ,'总库存:'+CONVERT(VARCHAR,b.Qty)+' 在单量:'+CONVERT(VARCHAR,b.QtyOut) QtyDetail 
FROM #Table_Goods a LEFT JOIN #Table_Stock b ON a.GoodId = b.GoodId

SELECT * FROM Stocks 
PIVOT (max(QtyDetail) for StoreName in (总仓,分仓)) pv

pivot IsNull Null
[解决办法]
外面再套一个select 你现在的结果是数据源,这样就可以isnull了
[解决办法]

CREATE TABLE #Table_Stock(
    GoodId INT,
    Qty INT,
    QtyOut INT,
    StoreName VARCHAR(10)
)
  
CREATE TABLE #Table_Goods(
    GoodId int,
    Title VARCHAR(10)
)
  
INSERT INTO #Table_Stock(GoodId, Qty, QtyOut, StoreName)
SELECT 1,10,0,'总仓' UNION
SELECT 1,0,0,'分仓' UNION
SELECT 2,5,1,'总仓'
 
INSERT INTO #Table_Goods(GoodId, Title)
SELECT 1,'A1' UNION
SELECT 2,'B2'


;WITH Stocks AS (
SELECT a.Title,
       b.StoreName,
       '总库存:'+CONVERT(VARCHAR,b.Qty)+' 在单量:'+CONVERT(VARCHAR,b.QtyOut) 'QtyDetail'
FROM #Table_Goods a
LEFT JOIN #Table_Stock b ON a.GoodId = b.GoodId

SELECT Title,
       总仓,
       isnull(分仓,'总库存:0 在单量:0') '分仓'


FROM Stocks 
PIVOT(max(QtyDetail) for StoreName in (总仓,分仓)) pv

/*
Title      总仓                      分仓
---------- ---------------------- ----------------------
A1         总库存:10 在单量:0       总库存:0 在单量:0
B2         总库存:5 在单量:1        总库存:0 在单量:0

(2 row(s) affected)
*/

热点排行