Sql Oracle行到列

Sql Oracle行到列,sql,oracle,Sql,Oracle,我有一个包含以下列和两行的表: COL1,COL2,COL3,NAME,DATE 两行中COL1、COL2、COL3的值分别为A、B、C。第一行中NAME的值为“DEL”,第二行为“LAP”。第一行的日期值为“11.12.13”,第二行的日期值为“13.11.13” 现在我想要一个包含单行和以下列的视图 COL1,COL2,COL3,DEL,LAP with values A,B,C,11.12.13,13.11.13. 使用pivot或任何其他功能都可以吗 谢谢 输出 | COL1 | C

我有一个包含以下列和两行的表:

COL1,COL2,COL3,NAME,DATE
两行中COL1、COL2、COL3的值分别为A、B、C。第一行中NAME的值为“DEL”,第二行为“LAP”。第一行的日期值为“11.12.13”,第二行的日期值为“13.11.13”

现在我想要一个包含单行和以下列的视图

COL1,COL2,COL3,DEL,LAP with values A,B,C,11.12.13,13.11.13.
使用pivot或任何其他功能都可以吗

谢谢

输出

| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |

假设两行中的公共字段都是COL1、COL2和COL3

SELECT a.col1, 
       a.col2, 
       a.col3, 
       a.date AS DEL, 
       b.date AS LAP 
FROM   yourtable AS a 
       INNER JOIN yourtable AS b 
               ON a.col1 = b.col1 
                  AND a.col2 = b.col2 
                  AND a.col3 = b.col3 
                  AND a.name = 'DEL' 
                  AND b.name = 'LAP' 

Oracle 11g R2架构设置

CREATE TABLE table_name (COL1,COL2,COL3,N_NAME,D_DATE) AS 
          SELECT  'A','B','C', 'DEL', '11.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '13.11.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'DEL', '12.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '14.11.13' FROM DUAL;
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
|    A |    B |    C | 12.12.13 | 14.11.13 |
查询1

CREATE TABLE table_name (COL1,COL2,COL3,N_NAME,D_DATE) AS 
          SELECT  'A','B','C', 'DEL', '11.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '13.11.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'DEL', '12.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '14.11.13' FROM DUAL;
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
|    A |    B |    C | 12.12.13 | 14.11.13 |
如果
COL1
COL2
COL3
N\u Name
的组合是唯一的,则可以执行以下操作:

SELECT Col1,
       Col2,
       Col3,
       MIN( CASE N_Name WHEN 'DEL' THEN D_Date END ) AS DEL,
       MIN( CASE N_Name WHEN 'LAP' THEN D_Date END ) AS LAP
FROM   table_name
GROUP BY
       Col1,
       Col2,
       Col3
WITH indexed_data AS (
  SELECT Col1,
         Col2,
         Col3,
         N_Name,
         D_Date,
         ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, N_Name ORDER BY D_Date ) AS idx
  FROM   table_name  
)
SELECT Col1,
       Col2,
       Col3,
       MIN( CASE N_Name WHEN 'DEL' THEN D_Date END ) AS DEL,
       MIN( CASE N_Name WHEN 'LAP' THEN D_Date END ) AS LAP
FROM   indexed_data
GROUP BY
       Col1,
       Col2,
       Col3,
       idx
ORDER BY
       Col1,
       Col2,
       Col3,
       idx

CREATE TABLE table_name (COL1,COL2,COL3,N_NAME,D_DATE) AS 
          SELECT  'A','B','C', 'DEL', '11.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '13.11.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'DEL', '12.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '14.11.13' FROM DUAL;
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
|    A |    B |    C | 12.12.13 | 14.11.13 |
查询2

CREATE TABLE table_name (COL1,COL2,COL3,N_NAME,D_DATE) AS 
          SELECT  'A','B','C', 'DEL', '11.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '13.11.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'DEL', '12.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '14.11.13' FROM DUAL;
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
|    A |    B |    C | 12.12.13 | 14.11.13 |
但是,如果您可以有多行具有相同组合的
COL1
COL2
COL3
N\u Name
,并且希望所有行都返回(按日期顺序),则可以执行以下操作:

SELECT Col1,
       Col2,
       Col3,
       MIN( CASE N_Name WHEN 'DEL' THEN D_Date END ) AS DEL,
       MIN( CASE N_Name WHEN 'LAP' THEN D_Date END ) AS LAP
FROM   table_name
GROUP BY
       Col1,
       Col2,
       Col3
WITH indexed_data AS (
  SELECT Col1,
         Col2,
         Col3,
         N_Name,
         D_Date,
         ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, N_Name ORDER BY D_Date ) AS idx
  FROM   table_name  
)
SELECT Col1,
       Col2,
       Col3,
       MIN( CASE N_Name WHEN 'DEL' THEN D_Date END ) AS DEL,
       MIN( CASE N_Name WHEN 'LAP' THEN D_Date END ) AS LAP
FROM   indexed_data
GROUP BY
       Col1,
       Col2,
       Col3,
       idx
ORDER BY
       Col1,
       Col2,
       Col3,
       idx

CREATE TABLE table_name (COL1,COL2,COL3,N_NAME,D_DATE) AS 
          SELECT  'A','B','C', 'DEL', '11.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '13.11.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'DEL', '12.12.13' FROM DUAL
UNION ALL SELECT  'A','B','C', 'LAP', '14.11.13' FROM DUAL;
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
| COL1 | COL2 | COL3 |      DEL |      LAP |
|------|------|------|----------|----------|
|    A |    B |    C | 11.12.13 | 13.11.13 |
|    A |    B |    C | 12.12.13 | 14.11.13 |

嗨…你能告诉警察吗