oracle 如何找到一种方法来挑选一个词有每列,以便保持一行每个客户?

b4wnujal  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(170)

按照 我 的 问题 的 每个 标题 的 总和
我 很 难 在 我 ORACLE SQL Developer 中 找到 查询 语句 以 缩短 时间 , 因为 我 有 一 个 庞大 的 数据 库 , 它 需要 时间 按 每个 子句 语句 上 的 where 和 join 表 的 单个 列 排序 , 但是 它 需要 两 个 小时 , 结果 结果 与 测试 一 个 配置 文件 客户 输出 不同 , 这 比 测试 整个 数据 库 要 快 。
购买 表 中 有 客户 购买 了 汽车 , 因此 我 试图 得到 一 个 答案 , 以 找出 客户 是否 有 特定 红色 任何 汽车 类型 , 以 输出 结果 列 , 无论 过去 和 现在 交易
Purchased table example 的 最 大 值
来自 Purchased 数据 表 的 数据 :
Customer _ ID 姓氏 名字 Colour Car SUV 卡车 4WD 50 Smith John Black 是
50 史密斯 约翰 红 是
50 Smith John Red 是 是 50 Smith John Red 是
20 麦格雷戈 凯蒂 蓝色 是 是 20 麦格雷戈 凯蒂 红色 是
20 麦格雷戈 凯蒂 布莱克 是 的
20 麦格雷戈 凯蒂 红 是 是 11 杨 凯伦 红 是
11 杨 凯伦 红 是
90 威尔金斯 梅丽莎 布莱克 是 的
90 Wilkins Melissa 红色 是 是 90 Wilkins Melissa 蓝色 是 是 90 Wilkins Melissa 灰色
135 Barnes Tom 红色 是 是 是 135 Barnes Tom 蓝色 是
135 巴恩斯 汤姆 布莱克 是
output result 格式
任何 红色 汽车 输出 结果 :
客户 标识 姓氏 名字 汽车 SUV 卡车 四轮 驱动 50 Smith John 是否 否 是 20 McGregor Katie 是否 否 否 11 Yang Karen 是 是否 否 90 Wilkins Melissa 否 否 否 是 135 Barnes Tom 是否 是
谢谢 你 的 帮忙
目前 , 我 正在 使用 以下 方法 说明 ;

排序 为 (
精选
清晰 ( 颜色 ) ,
客户 标识 、
姓氏 ,
汽车 ,
SUV 、
卡车 ,
四轮 驱动
从 购买 )
精选
即 客户 ID ,
即 姓氏 ,
nvl ( 例如 , 汽车 , " 否 " ) 汽车 ,
nvl ( e . SUV , " 否 " ) SUV ,
nvl ( 例如 , 卡车 , " 否 " ) 卡车 ,
nvl ( 例如 , 四轮 驱动 , " 否 " ) 四轮 驱动
从 (
精选
a . 客户 ID ,
a . 姓氏 ,
a . 汽车 ,
b . SUV ,
c . 卡车 ,
d . 四轮 驱动
从 (
精选
独特 ( 汽车 ) ,
客户 标识
从 已 排序 _
其中 颜色 = " 红色 "
和 汽车 = ' 是 ' ) a
数据 ) 左 连接
精选
独特 ( SUV ) ,
客户 标识
从 已 排序 _
其中 颜色 = " 红色 "
SUV = " 是 " ) b
ON a . 客户 标识 = b . 客户 标识
数据 ) 左 连接
精选
不同 ( 卡车 ) ,
客户 标识
从 已 排序 _
其中 颜色 = " 红色 "
和 卡车 = " 是 " ) c
ON a . 客户 标识 = c . 客户 标识
数据 ) 左 连接
精选
不同 的 ( 4WD ) ,
客户 标识
从 已 排序 _
其中 颜色 = " 红色 "
和 4wd = " 是 " ) d
ON a . 客户 标识 = d . 客户 标识
) e

r8uurelv

r8uurelv1#

我想我理解了你想要什么,但是你想要的输出(你发布的截图)不匹配。例如,McGregor有两个“红色”行,分别标记了汽车和四轮驱动,而你的输出显示“是”只设置为汽车。为什么?我不能运行你发布的查询,因为它是无效的,因此返回 nothing
示例数据:

SQL> select * From purchased;

CUSTOMER_ID LAST_NAME  FIRST_NAME COLOU CAR SUV TRUCK FOURWD
----------- ---------- ---------- ----- --- --- ----- -------
         50 Smith      John       Black     Yes
         50 Smith      John       Red   Yes
         50 Smith      John       Red           Yes   Yes
         50 Smith      John       Red   Yes
         20 McGregor   Katie      Blue  Yes           Yes 
         20 McGregor   Katie      Red   Yes                   --> car is red
         20 McGregor   Katie      Black     Yes
         20 McGregor   Katie      Red   Yes           Yes     --> car and 4WD are red
         11 Yang       Karen      Red   Yes
         11 Yang       Karen      Red       Yes
         90 Wilkins    Melissa    Black Yes
         90 Wilkins    Melissa    Red           Yes   Yes
         90 Wilkins    Melissa    Blue  Yes     Yes
         90 Wilkins    Melissa    Grey
        135 Barnes     Tom        Red   Yes     Yes   Yes
        135 Barnes     Tom        Blue  Yes
        135 Barnes     Tom        Black         Yes

17 rows selected.

查询,我理解为:

SQL> select customer_id, last_name, first_name,
  2    max(case when colour = 'Red' then nvl(car, 'No') end) as car,
  3    max(case when colour = 'Red' then nvl(suv, 'No') end) as suv,
  4    max(case when colour = 'Red' then nvl(truck, 'No') end) as truck,
  5    max(case when colour = 'Red' then nvl(fourwd, 'No') end) as fourwd
  6  From purchased
  7  where colour = 'Red'
  8  group by customer_id, last_name, first_name
  9  /

CUSTOMER_ID LAST_NAME  FIRST_NAME CAR SUV TRUCK FOURWD
----------- ---------- ---------- --- --- ----- -------
         50 Smith      John       Yes No  Yes   Yes
         20 McGregor   Katie      Yes No  No    Yes
         11 Yang       Karen      Yes Yes No    No
         90 Wilkins    Melissa    No  No  Yes   Yes
        135 Barnes     Tom        Yes No  Yes   Yes

SQL>

相关问题