SQL Pivot具有动态生成的列,聚合函数和无聚合列 [英] SQL Pivot with dynamic generated columns, aggregate function and columns without aggregation
问题描述
我有以下查询:
WITH preEKBE AS(
SELECT
EKPO . MANDT,
EKPO . EBELN,
EKPO . EBELP,
DD07T.DDTEXT AS c_Meaning,
EKBE . VGABE,
EKBE . DMBTR,
EKBE . MENGE,
COUNT(VGABE) OVER(PARTITION BY EKBE . EBELN, EKBE . EBELP, ZEKKN) AS c_COUNT,
CONVERT (varchar(10),MIN(EKBE . BLDAT) OVER ( PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EBKE_BLDAT_First,
CONVERT (varchar(10),MIN(EKBE . BUDAT) OVER ( PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EKBE_BUDAT_First,
CONVERT (varchar(10),MAX(EKBE . BLDAT) OVER ( PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EBKE_BLDAT_Last,
CONVERT (varchar(10),MAX(EKBE . BUDAT) OVER ( PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EKBE_BUDAT_Last
FROM EKPO
LEFT JOIN EKKO
ON EKPO . MANDT = EKKO . MANDT
AND EKPO . EBELN = EKKO . EBELN
LEFT JOIN EKBE
ON EKPO . MANDT = EKBE . MANDT
AND EKPO . EBELN = EKBE . EBELN
AND EKPO . EBELP = EKBE . EBELP
LEFT JOIN DD07T
ON DD07T . DOMNAME = 'VGABE'
AND DD07T . DOMVALUE_L = EKBE.VGABE
AND DD07T . DDLANGUAGE = 'D'
)
SELECT * INTO #preEKBE FROM preEKBE
ORDER BY EBELN , EBELP
它为我生成了这张表
+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+
| MANDT | EBELN | EBELP | c_Meaning | VGABE | DMBTR | MENGE | c_COUNT | c_EBKE_BLDAT_First | c_EKBE_BUDAT_First | c_EBKE_BLDAT_Last | c_EKBE_BUDAT_Last |
+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+
| 800 | 3000000004 | 00001 | Wareneingang | 1 | 27.95 | 1.000 | 1 | 19.12.2000 | 19.12.2000 | 19.12.2000 | 19.12.2000 |
| 800 | 3000000004 | 00001 | Rechnungseingang | 2 | 27.95 | 1.000 | 1 | 19.12.2000 | 21.12.2000 | 19.12.2000 | 21.12.2000 |
| 800 | 3000000004 | 00002 | Wareneingang | 1 | 10.95 | 1.000 | 1 | 19.12.2000 | 19.12.2000 | 19.12.2000 | 19.12.2000 |
| 800 | 3000000004 | 00002 | Rechnungseingang | 2 | 10.95 | 1.000 | 1 | 19.12.2000 | 21.12.2000 | 19.12.2000 | 21.12.2000 |
| 800 | 4500008499 | 00010 | Wareneingang | 1 | 268.43 | 1.000 | 1 | 27.03.2000 | 27.03.2000 | 27.03.2000 | 27.03.2000 |
| 800 | 4500008499 | 00010 | Leistungserfassungsblatt | 9 | 268.43 | 1.000 | 1 | 27.03.2000 | 27.03.2000 | 27.03.2000 | 27.03.2000 |
| 800 | 4500010470 | 00010 | Wareneingang | 1 | 0.00 | 1092.000 | 6 | 07.02.2001 | 07.02.2001 | 07.02.2001 | 07.02.2001 |
| 800 | 4500010470 | 00010 | Wareneingang | 1 | 0.00 | 3512.000 | 6 | 07.02.2001 | 07.02.2001 | 07.02.2001 | 07.02.2001 |
| 800 | 4500010470 | 00010 | Warenausgabe für Umlagerung | 6 | 1615.52 | 3512.000 | 6 | 07.02.2001 | 07.02.2001 | 07.02.2001 | 07.02.2001 |
| 800 | 4500010470 | 00010 | Warenausgabe für Umlagerung | 6 | 502.32 | 1092.000 | 6 | 07.02.2001 | 07.02.2001 | 07.02.2001 | 07.02.2001 |
| 800 | 4500010470 | 00010 | Lieferung zu Umlagerung | 8 | 0.00 | 1092.000 | 6 | 01.01.1900 | 07.02.2001 | 01.01.1900 | 07.02.2001 |
| 800 | 4500010470 | 00010 | Lieferung zu Umlagerung | 8 | 0.00 | 3512.000 | 6 | 01.01.1900 | 07.02.2001 | 01.01.1900 | 07.02.2001 |
+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+
现在,我有一个动态的Pivot,可以部分使用.
Now I've got a dynamic Pivot that partially works.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(col + '_' + VGABE)
from #preEKBE t
cross apply
(
select 'c_DMBTR', 1 union all
select 'c_MENGE', 2 union all
select 'c_COUNT', 3
) c (col, so)
group by col, so, VGABE
order by VGABE, so
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'SELECT EBELN, EBELP,' + @cols + N'
from
(
select
t.EBELN,
t.EBELP,
new_col = c.orig_col + ''_'' + VGABE,
c.value
from #preEKBE t
cross apply
(
select ''c_MENGE'', t.MENGE union all
select ''c_DMBTR'', t.DMBTR union all
select ''c_COUNT'', t.c_COUNT
) c (orig_col, value)
) x
pivot
(
sum(value)
for new_col in (' + @cols + N')
) p
order by EBELN , EBELP'
exec sp_executesql @query;
给我结果:
+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
| EBELN | EBELP | c_DMBTR_1 | c_MENGE_1 | c_COUNT_1 | c_DMBTR_2 | c_MENGE_2 | c_COUNT_2 | c_DMBTR_6 | c_MENGE_6 | c_COUNT_6 | c_DMBTR_7 | c_MENGE_7 | c_COUNT_7 | c_DMBTR_8 | c_MENGE_8 | c_COUNT_8 | c_DMBTR_9 | c_MENGE_9 | c_COUNT_9 | c_DMBTR_P | c_MENGE_P | c_COUNT_P | c_DMBTR_R | c_MENGE_R | c_COUNT_R |
+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
| 3000000004 | 00001 | 27.950 | 1.000 | 1.000 | 27.950 | 1.000 | 1.000 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 3000000004 | 00002 | 10.950 | 1.000 | 1.000 | 10.950 | 1.000 | 1.000 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
我需要查询是动态的,因为列VGABE
可以创建新的列名,并且可以有一些未使用的值,我只希望使用VGABE
值.
I need the query to be dynamic because of the Column VGABE
to create the new column names and there can be values that are not used, and I only want the VGABE
values being used.
现在的问题是我想添加更多应该动态生成的列.当一个VGABE
的值为1时,我需要一个名为c_Meaning_1 (nvarchar)
的列,它将具有与DD07T
的联接中的值.
Now the problem is that I want to add more columns which also should be generated dynamically. When there is a VGABE
with 1 than I need a column called c_Meaning_1 (nvarchar)
and it will have the value from the join with DD07T
.
c_COUNT_
代表每个记录的每个VGABE
值的计数.本专栏的作品完美无缺.
The c_COUNT_
stands for the Count of each VGABE
Value per record. This column works perfectly.
在这些列之后,我还需要添加值VGABE
串联在新列名末尾的列c_BLDAT_First_
,c_BUDAT_First_
,c_BLDAT_Last_
和c_BUDAT_Last_
.此值在CTE中计算.
After those columns I also need to add the columns c_BLDAT_First_
, c_BUDAT_First_
, c_BLDAT_Last_
, and c_BUDAT_Last_
with the value of VGABE
concatenated on the end of the new column name. This value is calculated in the CTE.
有没有办法在没有临时表的情况下直接使用CTE?
Is there a way to use the CTE directly without a temporary table?
我不确定如何解决此问题,因为我正在处理多种数据类型,并且每种数据类型的聚合方式都不同.当VGABE
的值分别为1和9时,它应该看起来像这样:
I'm not sure how to solve this since I'm dealing with multiple datatypes and they each would be aggregated differently. When there are the values 1 and 9 for VGABE
then it should look like this:
+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+
| C_MEANING_1 | C_DMBTR_1 | C_MENGE_1 | C_COUNT_1 | C_EBKE_BLDAT_FIRST_1 | C_EKBE_BUDAT_FIRST_1 | C_EBKE_BLDAT_LAST_1 | C_EKBE_BUDAT_LAST_1 | C_MEANING_9 | C_DMBTR_9 | C_MENGE_9 | C_COUNT_9 | C_EBKE_BLDAT_FIRST_9 | C_EKBE_BUDAT_FIRST_9 | C_EBKE_BLDAT_LAST_9 | C_EKBE_BUDAT_LAST_9 |
+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+
| Wareneingang: | 10,00 | 1 | 1 | 19.12.2000 | 19.12.2000 | 19.12.2000 | 19.12.2000 | Leistungserfassungsblatt: | 0 | 0 | 0 | NULL | NULL | NULL | NULL |
| Wareneingang: | 0 | 0 | 0 | NULL | NULL | NULL | NULL | Leistungserfassungsblatt: | 20 | 2 | 1 | 19.12.2000 | 19.12.2000 | 19.12.2000 | 19.12.2000 |
+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+
对于每个VGABE
值,应按上面给出的顺序有一个自己的列.如果您需要更多信息,请问我.我正在将SQL Server 2014与SQL Management Studio 2014和TSQL一起使用.
For each VGABE
value there should be a own column in the order given above. If you need further information just ask me please. I'm using SQL Server 2014 with SQL Management Studio 2014 and TSQL.
推荐答案
好,这里有些混乱,因为您想要将具有多行的多列转换为更多列,并且最需要的是为每个数据库使用不同的聚合,因为其中一些需要SUM
,而另一些则必须使用MAX
或MIN
(在字符串/日期上).
Well you've got a bit of a mess here because you want to convert multiple columns with multiple rows onto more columns and on top of that you'll need to use a different aggregate for each because some of them you need to SUM
and others you'll have to use MAX
or MIN
(on the string/dates).
您应该始终而不是直接研究动态sql版本,而是尝试使用较小版本的静态查询来正确获取逻辑.我认为,这使动态SQL的使用变得更加容易,因为您不会猜测要做什么或什么是行不通的.
Instead of diving right into a dynamic sql version you should always try to get the logic correct using a smaller version of a static query. This makes working with dynamic SQL much easier, in my opinion, because you aren't guessing at what to do or what isn't working right.
我首先从一个查询开始,该查询将获取您求和的每个项目的总数.
I'd first start with a query that gets the total of each item you need to SUM.
select ebeln, ebelp,
c_Meaning,
vgabe,
dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)),
c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)),
c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)),
c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50))
from preEKBE
请参见带演示的SQL小提琴.这将获得最终结果所需的所有值,因为您正在获取ebeln
,ebelp
和vgabe
组合的总和.您将看到,我还将所有值都转换为相同的数据类型-这对于下一步是必要的-不可透视.由于所有数据都将存储在同一列中,因此它们需要相同的数据类型.
See SQL Fiddle with Demo. This gets the values of everything you'll need in the final result because you are getting the sum over the combination of ebeln
, ebelp
, and vgabe
. You'll see that I also cast all of the values into the same datatype - this is necessary for the next step - the unpivot. Since all of the data will be stored in the same column, they need the same datatypes.
select d.ebeln, d.ebelp,
new_col = c.orig_col + '_' + cast(d.vgabe as varchar(2)),
c.value
from
(
select ebeln, ebelp,
c_Meaning,
vgabe,
dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)),
c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)),
c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)),
c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50))
from preEKBE
) d
cross apply
(
select 'c_Meaning', c_Meaning union all
select 'c_MENGE', menge union all
select 'c_DMBTR', dmbtr union all
select 'c_count', c_count union all
select 'c_EBKE_BLDAT_First', c_EBKE_BLDAT_First union all
select 'c_EKBE_BUDAT_First', c_EKBE_BUDAT_First union all
select 'c_EBKE_BLDAT_Last', c_EBKE_BLDAT_Last union all
select 'c_EKBE_BUDAT_Last', c_EKBE_BUDAT_Last
) c (orig_col, value)
请参见带演示的SQL小提琴.现在您得到的数据如下所示:
See SQL Fiddle with Demo. Now you've got data that looks like this:
| EBELN | EBELP | NEW_COL | VALUE |
|------------|-------|----------------------|-----------------------------|
| 3000000004 | 1 | c_Meaning_1 | Wareneingang |
| 3000000004 | 1 | c_MENGE_1 | 1 |
| 3000000004 | 1 | c_DMBTR_1 | 27.95 |
| 3000000004 | 1 | c_count_1 | 1 |
| 3000000004 | 1 | c_EBKE_BLDAT_First_1 | 19.12.2000 |
| 3000000004 | 1 | c_EKBE_BUDAT_First_1 | 19.12.2000 |
最后,您将应用PIVOT功能:
Finally, you'd apply the PIVOT function:
select ebeln,
ebelp,
c_Meaning_1, c_MENGE_1, c_DMBTR_1, c_count_1,
c_EBKE_BLDAT_First_1, c_EKBE_BUDAT_First_1,
c_EBKE_BLDAT_Last_1, c_EKBE_BUDAT_Last_1
from
(
select d.ebeln, d.ebelp,
new_col = c.orig_col + '_' + cast(d.vgabe as varchar(2)),
c.value
from
(
select ebeln, ebelp,
c_Meaning,
vgabe,
dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)),
c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)),
c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)),
c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50))
from preEKBE
) d
cross apply
(
select 'c_Meaning', c_Meaning union all
select 'c_MENGE', menge union all
select 'c_DMBTR', dmbtr union all
select 'c_count', c_count union all
select 'c_EBKE_BLDAT_First', c_EBKE_BLDAT_First union all
select 'c_EKBE_BUDAT_First', c_EKBE_BUDAT_First union all
select 'c_EBKE_BLDAT_Last', c_EBKE_BLDAT_Last union all
select 'c_EKBE_BUDAT_Last', c_EKBE_BUDAT_Last
) c (orig_col, value)
) src
pivot
(
max(value)
for new_col in (c_Meaning_1, c_MENGE_1, c_DMBTR_1, c_count_1,
c_EBKE_BLDAT_First_1, c_EKBE_BUDAT_First_1,
c_EBKE_BLDAT_Last_1, c_EKBE_BUDAT_Last_1)
) piv;
请参见带演示的SQL小提琴.
现在您有了工作逻辑,就可以将其转换为动态sql:
Now that you have working logic, you can convert this to dynamic sql:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(col + '_' + cast(VGABE as varchar(2)))
from preEKBE t
cross apply
(
select 'c_meaning', 0 union all
select 'c_DMBTR', 1 union all
select 'c_MENGE', 2 union all
select 'c_COUNT', 3 union all
select 'c_EBKE_BLDAT_FIRST', 4 union all
select 'c_EKBE_BUDAT_FIRST', 5 union all
select 'c_EBKE_BLDAT_LAST', 6 union all
select 'c_EKBE_BUDAT_LAST', 7
) c (col, so)
group by col, so, VGABE
order by VGABE, so
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'SELECT EBELN, EBELP, ' + @cols + N'
from
(
select d.ebeln,
d.ebelp,
new_col = c.orig_col + ''_'' + cast(d.vgabe as varchar(2)),
c.value
from
(
select ebeln, ebelp,
c_Meaning,
vgabe,
dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)),
c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)),
c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)),
c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)),
c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50))
from preEKBE
) d
cross apply
(
select ''c_meaning'', d.c_meaning union all
select ''c_MENGE'', d.MENGE union all
select ''c_DMBTR'', d.DMBTR union all
select ''c_COUNT'', d.c_COUNT union all
select ''c_EBKE_BLDAT_First'', d.c_EBKE_BLDAT_First union all
select ''c_EKBE_BUDAT_First'', d.c_EKBE_BUDAT_First union all
select ''c_EBKE_BLDAT_Last'', d.c_EBKE_BLDAT_Last union all
select ''c_EKBE_BUDAT_Last'', d.c_EKBE_BUDAT_Last
) c (orig_col, value)
) x
pivot
(
max(value)
for new_col in (' + @cols + N')
) p
order by EBELN , EBELP'
exec sp_executesql @query;
请参见带有演示的SQL小提琴.得到的最终结果是:
See SQL Fiddle with Demo. This gives a final result of:
| EBELN | EBELP | C_MEANING_1 | C_DMBTR_1 | C_MENGE_1 | C_COUNT_1 | C_EBKE_BLDAT_FIRST_1 | C_EKBE_BUDAT_FIRST_1 | C_EBKE_BLDAT_LAST_1 | C_EKBE_BUDAT_LAST_1 | C_MEANING_2 | C_DMBTR_2 | C_MENGE_2 | C_COUNT_2 | C_EBKE_BLDAT_FIRST_2 | C_EKBE_BUDAT_FIRST_2 | C_EBKE_BLDAT_LAST_2 | C_EKBE_BUDAT_LAST_2 | C_MEANING_6 | C_DMBTR_6 | C_MENGE_6 | C_COUNT_6 | C_EBKE_BLDAT_FIRST_6 | C_EKBE_BUDAT_FIRST_6 | C_EBKE_BLDAT_LAST_6 | C_EKBE_BUDAT_LAST_6 | C_MEANING_8 | C_DMBTR_8 | C_MENGE_8 | C_COUNT_8 | C_EBKE_BLDAT_FIRST_8 | C_EKBE_BUDAT_FIRST_8 | C_EBKE_BLDAT_LAST_8 | C_EKBE_BUDAT_LAST_8 | C_MEANING_9 | C_DMBTR_9 | C_MENGE_9 | C_COUNT_9 | C_EBKE_BLDAT_FIRST_9 | C_EKBE_BUDAT_FIRST_9 | C_EBKE_BLDAT_LAST_9 | C_EKBE_BUDAT_LAST_9 |
|------------|-------|--------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|-----------------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|-------------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|--------------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|
| 3000000004 | 1 | Wareneingang | 27.95 | 1 | 1 | 19.12.2000 | 19.12.2000 | 19.12.2000 | 19.12.2000 | Rechnungseingang | 27.95 | 1 | 1 | 19.12.2000 | 21.12.2000 | 19.12.2000 | 21.12.2000 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 3000000004 | 2 | Wareneingang | 10.95 | 1 | 1 | 19.12.2000 | 19.12.2000 | 19.12.2000 | 19.12.2000 | Rechnungseingang | 10.95 | 1 | 1 | 19.12.2000 | 21.12.2000 | 19.12.2000 | 21.12.2000 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 4500008499 | 10 | Wareneingang | 268.43 | 1 | 1 | 27.03.2000 | 27.03.2000 | 27.03.2000 | 27.03.2000 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | Leistungserfassungsblatt | 268.43 | 1 | 1 | 27.03.2000 | 27.03.2000 | 27.03.2000 | 27.03.2000 |
| 4500010470 | 10 | Wareneingang | 0.00 | 4604 | 12 | 07.02.2001 | 07.02.2001 | 07.02.2001 | 07.02.2001 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | Warenausgabe für Umlagerung | 2117.84 | 4604 | 12 | 07.02.2001 | 07.02.2001 | 07.02.2001 | 07.02.2001 | Lieferung zu Umlagerung | 0.00 | 4604 | 12 | 01.01.1900 | 07.02.2001 | 01.01.1900 | 07.02.2001 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
这篇关于SQL Pivot具有动态生成的列,聚合函数和无聚合列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!