Объедините две строки в SQL

Из http://en.cppreference.com/w/cpp/numeric/random/random_device :

Обратите внимание, что std :: random_device может быть реализовано в терминах движка псевдослучайных чисел, если для реализации не доступен недетерминированный источник (например, аппаратное устройство).

blockquote>

Я ожидал бы достойной реализации, по крайней мере, RNG.

Редактирование: я подозреваю, что они сознательно выбрали выполнение одной и той же последовательности каждый раз, чтобы сделать очевидным тот факт, что поток не был таким случайным, как обещали.

34
задан Jason 31 May 2010 в 02:37
поделиться

4 ответа

Мой случай, у меня есть таблица как это

---------------------------------------------
|company_name|company_ID|CA        |   WA   |
---------------------------------------------
|Costco      |   1      |NULL      | 2      |
---------------------------------------------
|Costco      |   1      |3         |Null    |
---------------------------------------------

, И я хочу, чтобы он был похож ниже:

---------------------------------------------
|company_name|company_ID|CA        |   WA   |
---------------------------------------------
|Costco      |   1      |3         | 2      |
---------------------------------------------

Большая часть кодекса - почти то же:

SELECT
    FK,
    MAX(CA) AS CA,
    MAX(WA) AS WA
FROM
    table1
GROUP BY company_name,company_ID

единственная разница эти group by, если Вы помещаете два имени столбцов в нее, Вы можете сгруппировать их в парах.

-1
ответ дан 27 November 2019 в 17:13
поделиться

Здесь вам могут помочь агрегатные функции. Агрегатные функции игнорируют NULL (по крайней мере, это верно для SQL Server, Oracle и Jet/Access), поэтому вы можете использовать такой запрос (проверено на SQL Server Express 2008 R2):

SELECT
    FK,
    MAX(Field1) AS Field1,
    MAX(Field2) AS Field2
FROM
    table1
GROUP BY
    FK;

Я использовал MAX, но любой агрегат, который выбирает одно значение из строк GROUP BY, должен работать.

Тестовые данные:

CREATE TABLE table1 (FK int, Field1 varchar(10), Field2 varchar(10));

INSERT INTO table1 VALUES (3, 'ABC', NULL);
INSERT INTO table1 VALUES (3, NULL, 'DEF');
INSERT INTO table1 VALUES (4, 'GHI', NULL);
INSERT INTO table1 VALUES (4, 'JKL', 'MNO');
INSERT INTO table1 VALUES (4, NULL, 'PQR');

Результаты:

FK  Field1  Field2
--  ------  ------
3   ABC     DEF
4   JKL     PQR
17
ответ дан 27 November 2019 в 17:13
поделиться

Возможно, есть более аккуратные методы, но одним из подходов может быть следующий:

SELECT    t.fk,
          (
             SELECT t1.Field1 
             FROM   `table` t1 
             WHERE  t1.fk = t.fk AND t1.Field1 IS NOT NULL
             LIMIT  1
          ) Field1,
          (
             SELECT t2.Field2
             FROM   `table` t2 
             WHERE  t2.fk = t.fk AND t2.Field2 IS NOT NULL
             LIMIT  1
          ) Field2
FROM      `table` t
WHERE     t.fk = 3
GROUP BY  t.fk;

Тестовый пример:

CREATE TABLE `table` (fk int, Field1 varchar(10), Field2 varchar(10));

INSERT INTO `table` VALUES (3, 'ABC', NULL);
INSERT INTO `table` VALUES (3, NULL, 'DEF');
INSERT INTO `table` VALUES (4, 'GHI', NULL);
INSERT INTO `table` VALUES (4, NULL, 'JKL');
INSERT INTO `table` VALUES (5, NULL, 'MNO');

Результат:

+------+--------+--------+
| fk   | Field1 | Field2 |
+------+--------+--------+
|    3 | ABC    | DEF    |
+------+--------+--------+
1 row in set (0.01 sec)

Выполнение того же запроса без WHERE t. fk = 3, он вернет следующий набор результатов:

+------+--------+--------+
| fk   | Field1 | Field2 |
+------+--------+--------+
|    3 | ABC    | DEF    |
|    4 | GHI    | JKL    |
|    5 | NULL   | MNO    |
+------+--------+--------+
3 rows in set (0.01 sec)
2
ответ дан 27 November 2019 в 17:13
поделиться

Есть несколько способов, зависящих от некоторых правил работы с данными, которые вы не указали, но вот один способ, использующий то, что вы дали.

SELECT
    t1.Field1,
    t2.Field2
FROM Table1 t1
    LEFT JOIN Table1 t2 ON t1.FK = t2.FK AND t2.Field1 IS NULL

Another way:

SELECT
    t1.Field1,
    (SELECT Field2 FROM Table2 t2 WHERE t2.FK = t1.FK AND Field1 IS NULL) AS Field2
FROM Table1 t1
7
ответ дан 27 November 2019 в 17:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: