Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据列的值获取和排序一些列?_Sql_Sql Insert - Fatal编程技术网

Sql 如何根据列的值获取和排序一些列?

Sql 如何根据列的值获取和排序一些列?,sql,sql-insert,Sql,Sql Insert,我正在尝试从另一个表创建一个表。 问题是比较3个不同的列,其中一个不同的列为null 将“比较ItemID1、ItemID2和ItemID3,只取其中有值的项,并使其成为一行” 没有永远是最大的。如果该列包含“是”和“否”,则将选择“否” 注意。一个CustomerID可以有多个不同的ItemID 例1 +------------+---------+---------+---------+------------+ | CustomerID | ItemID1 | ItemID2 | It

我正在尝试从另一个表创建一个表。 问题是比较3个不同的列,其中一个不同的列为null

  • 将“比较ItemID1、ItemID2和ItemID3,只取其中有值的项,并使其成为一行”
  • 没有永远是最大的。如果该列包含“是”和“否”,则将选择“否”
  • 注意。一个CustomerID可以有多个不同的ItemID
例1

+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 |   Value    |
+------------+---------+---------+---------+------------+
|          1 | abc     | xyz     | cde     | Yes        |
|          1 | abc     | null    | cde     | No         |
|          1 | null    | xyz     | cde     | No         |
|          1 | abc     | xyz     | cde     | No         |
|          1 | iop     | tyu     | ghj     | Yes        |
|          1 | iop     | null    | ghj     | Yes        |
|          1 | iop     | tyu     | ghj     | Yes        |
|          1 | null    | tyu     | ghj     | Yes        |
+------------+---------+---------+---------+------------+
预期结果将是

+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | abc     | xyz     | cde     | No    |
|          1 | iop     | tyu     | ghj     | Yes   |
+------------+---------+---------+---------+-------+
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | fgh     | xyz     | zxc     | No    |
|          1 | iop     | tyu     | ghj     | Yes   |
|          2 | abc     | xyz     | cde     | No    |
+------------+---------+---------+---------+-------+
例2

+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 |   Value    |
+------------+---------+---------+---------+------------+
|          1 | qwe     | null    | asd     | No         |
|          1 | qwe     | null    | asd     | Yes        |
|          1 | null    | null    | asd     | Yes        |
|          1 | qwe     | null    | asd     | Yes        |
+------------+---------+---------+---------+------------+
预期结果将是

+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | qwe     | null    | asd     | No    |
+------------+---------+---------+---------+-------+
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | fgh     | xyv     | zxc     | Yes   |
+------------+---------+---------+---------+-------+
例3

+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 |   Value    |
+------------+---------+---------+---------+------------+
|          1 | fgh     | null    | zxc     | Yes        |
|          1 | fgh     | xyv     | zxc     | Yes        |
|          1 | null    | null    | zxc     | Yes        |
|          1 | fgh     | null    | zxc     | Yes        |
+------------+---------+---------+---------+------------+
预期结果将是

+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | qwe     | null    | asd     | No    |
+------------+---------+---------+---------+-------+
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | fgh     | xyv     | zxc     | Yes   |
+------------+---------+---------+---------+-------+
我已经试过了。 我已经试过了,代码如下。但是收到了错误的结果。 看起来它只是基于ItemID1取第一个

范例

+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 |   Value    |
+------------+---------+---------+---------+------------+
|          1 | fgh     | null    | zxc     | Yes        |
|          1 | fgh     | xyv     | zxc     | No         |
|          1 | null    | null    | zxc     | Yes        |
|          1 | fgh     | null    | zxc     | Yes        |
|          1 | iop     | tyu     | ghj     | Yes        |
|          1 | iop     | null    | ghj     | Yes        |
|          1 | iop     | tyu     | ghj     | Yes        |
|          1 | null    | tyu     | ghj     | Yes        |
|          2 | abc     | xyz     | cde     | Yes        |
|          2 | abc     | null    | cde     | No         |
|          2 | null    | xyz     | cde     | No         |
|          2 | abc     | xyz     | cde     | No         |
+------------+---------+---------+---------+------------+
结果返回

+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | fgh     | null    | zxc     | Yes   |
|          1 | iop     | tyu     | ghj     | Yes   |
|          2 | abc     | xyz     | cde     | Yes   |
+------------+---------+---------+---------+-------+
预期结果将是

+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | abc     | xyz     | cde     | No    |
|          1 | iop     | tyu     | ghj     | Yes   |
+------------+---------+---------+---------+-------+
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
|          1 | fgh     | xyz     | zxc     | No    |
|          1 | iop     | tyu     | ghj     | Yes   |
|          2 | abc     | xyz     | cde     | No    |
+------------+---------+---------+---------+-------+
我试过的代码

INSERT INTO NEW_TABLE
    (CustomerID,
     ItemID1,
     ItemID2,
     ItemID3,
     Value)
SELECT
     CustomerID,
     ItemID1,
     ItemID2,
     ItemID3,
     Value
FROM (SELECT
     CustomerID,
     ItemID1,
     ItemID2,
     ItemID3,
     Value,
     row_number() OVER(PARTITION BY ItemID1 ORDER BY ETA DESC)rn
     FROM ETA_TABLE)
WHERE rn = 1
我想你想要:

SELECT
    CustomerID,
    MAX(ItemID1) AS ItemID1,
    MAX(ItemID2) AS ItemID2,
    MAX(ItemID3) AS ItemID3,
    CASE WHEN SUM(CASE WHEN Value = 'No' THEN 1 END) > 0 THEN 'No' ELSE 'Yes' END AS Value
FROM ETA_TABLE
GROUP BY
    CustomerID;
select t.*,
       (select min(value)
        from t t2
        where t2.CustomerID = t.CustomerID and
              (t2.ItemID1 = t.ItemID1 or
               t2.ItemID2 = t.ItemID2 or
               t2.ItemID3 = t.ItemID3
              )
       ) as valu
from (select distinct CustomerID, ItemID1, ItemID2, ItemID3
      from t
      where ItemID1 is not null and
            ItemID2 is not null and
            ItemID3 is not null
     ) t;
我想你想要:

SELECT
    CustomerID,
    MAX(ItemID1) AS ItemID1,
    MAX(ItemID2) AS ItemID2,
    MAX(ItemID3) AS ItemID3,
    CASE WHEN SUM(CASE WHEN Value = 'No' THEN 1 END) > 0 THEN 'No' ELSE 'Yes' END AS Value
FROM ETA_TABLE
GROUP BY
    CustomerID;
select t.*,
       (select min(value)
        from t t2
        where t2.CustomerID = t.CustomerID and
              (t2.ItemID1 = t.ItemID1 or
               t2.ItemID2 = t.ItemID2 or
               t2.ItemID3 = t.ItemID3
              )
       ) as valu
from (select distinct CustomerID, ItemID1, ItemID2, ItemID3
      from t
      where ItemID1 is not null and
            ItemID2 is not null and
            ItemID3 is not null
     ) t;
MIN()


注意:您的示例数据具有不相交的项集——没有重叠。如果您的实际数据中存在这种情况,而这并不能解决您的问题,您应该再问一个问题。

Hi@Tim谢谢您的回答,我不明白这一行是如何工作的。当计数(值)计数(*)时,则最大值结束为值。空值是最大值吗?在我解决任何问题之前,你能解释一下为什么在所有情况下,
value
列中都会出现
Null
输出吗?哦,对不起,我犯了一个错误。它不需要为null。“值”列假定为“是”或“否”。否比“是”大,因此,如果记录由“是”和“否”组成,则最终结果应仅显示“否”。如果记录只包含yes,那么最终结果应该显示yes only不知道你现在在说什么。您的样本数据中没有一个包含是或否。嗨@Tim,我已经编辑了这些问题。为了更好地理解,我也更改了数据。现在,该值为“是”或“否”。对于错误,请解释预期输出背后的逻辑。对于项目具有多个非
NULL
值的客户,填写
NULL
值的规则是什么?@IvanSim。我删除了不兼容的数据库标记。请仅使用您真正使用的数据库进行标记。