请教个问题
一个表table
里面有三个字段date,qty,product
我想在某一天date显示某个生产内容product的数量qty
只显示一次,该怎么显示比如
date product qty
2008-10-10 足球 3
2008-10-10 足球 3
2008-10-10 足球 3我只想显示一次,因为当天的product只生产了3个
2008-10-10 足球
2008-10-10 足球
2008-10-10 足球 3
一个表table
里面有三个字段date,qty,product
我想在某一天date显示某个生产内容product的数量qty
只显示一次,该怎么显示比如
date product qty
2008-10-10 足球 3
2008-10-10 足球 3
2008-10-10 足球 3我只想显示一次,因为当天的product只生产了3个
2008-10-10 足球
2008-10-10 足球
2008-10-10 足球 3
-------------------------------------------
那为什么会有三条记录合计数量是9呢?
go
create table tb(date datetime, product nvarchar(5), qty VARCHAR(5))
insert tb select '2008-10-10' , N'足球', 3
insert tb select '2008-10-10' , N'足球', 3
insert tb select '2008-10-10', N'足球', 3
ALTER TABLE TB
ADD ID INT IDENTITY(1,1)
GO
SELECT DATE,PRODUCT,QTY=CASE WHEN EXISTS(SELECT QTY FROM TB WHERE ID>T.ID ) THEN '' ELSE QTY END FROM TB T
ALTER TABLE TB
DROP COLUMN ID
/*DATE PRODUCT QTY
------------------------------------------------------ ------- -----
2008-10-10 00:00:00.000 足球
2008-10-10 00:00:00.000 足球
2008-10-10 00:00:00.000 足球 3*/
CREATE TABLE #(DATE CHAR(10),PRODUCT CHAR(10),QTY INT)
INSERT #
SELECT
'2008-10-10' , '足球' , 3
UNION ALL SELECT
'2008-10-10' ,'足球' , 3
UNION ALL SELECT
'2008-10-10' ,'足球' , 3
SELECT * FROM #
SELECT DATE,PRODUCT,CASE WHEN EXISTS(SELECT 1 FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATE,PRODUCT) AS ID,* FROM #) X WHERE S.DATE=X.DATE AND S.PRODUCT=X.PRODUCT AND X.ID>S.ID) THEN '' ELSE CONVERT(VARCHAR,QTY) END AS QTY FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATE,PRODUCT) AS ID,* FROM #)S ORDER BY ID/*
DATE PRODUCT QTY
---------- ---------- ------------------------------
2008-10-10 足球
2008-10-10 足球
2008-10-10 足球
2008-10-10 足球 3(4 row(s) affected)
*/
DROP TABLE #
奇怪,你这个ADD ID INT IDENTITY(1,1)中的IDENTITY(1,1)什么意思?
而且ID>T.ID ,虽然你后来添加了ID列,但原先没有值啊,而且就算有值,你意思是递增的?
僅使用在有 INTO table 子句的 SELECT 陳述式,以將識別資料行插入新的資料表。雖然類似,但 IDENTITY 函數不是與 CREATE TABLE 和 ALTER TABLE 共用的 IDENTITY 屬性.語法
IDENTITY ( data_type [ , seed , increment ] ) AS column_name引數
data_type是識別資料行的資料型別。識別資料行的有效資料型別就是整數資料型別類別的任何資料型別 (除了 bit 資料型別以外),或 decimal 資料型別。seed是要指派到資料表中第一個資料列的值。每一個後續的資料列會被指派下一個識別值,它等於最後一個 IDENTITY 值加上 increment 值。如果沒有指定 seed 或 increment,則兩者都預設為 1。increment是新增到資料表內後續資料列的 seed 值之遞增值。Column_name是插入到新資料表的資料行名稱。 傳回型別
傳回與 data_type 相同的型別。備註
因為此函數會在資料表中建立資料行,資料行的名稱必須以下列這些方式之一在選取清單中指定:--(1)
SELECT IDENTITY(int, 1,1) AS ID_Num
INTO NewTable
FROM OldTable--(2)
SELECT ID_Num = IDENTITY(int, 1, 1)
INTO NewTable
FROM OldTable