J'ai un grand ensemble de données, dont certaines sont des enregistrements en double, qui sont identifiables par des dupes dans deux champs.Renommez les données, puis supprimez les doublons
Pour trouver ces enregistrements, les travaux requête suivante:
SELECT * FROM supplierstuffs
GROUP BY "Supplier Code", "Cost ex Tax"
HAVING count("Description") > 1
Fondamentalement, ce que je veux faire est chat ensemble toutes les valeurs de « Description » pour former une seule rangée, puis remplacer toutes les lignes dupliquées avec la seule rangée.
Ceci est ma question à moitié cassée jusqu'à présent, c'est kludgy et horrible. Mon objectif principal est de faire fonctionner ça - mais si j'apprends de nouvelles astuces en SQL, ce n'est pas du tout une mauvaise chose.
UPDATE supplierstuffs SET "Description" =
(SELECT array_to_string(array_accum("Description"), ', ') FROM supplierstuffs
GROUP BY "Supplier Code", "Cost ex Tax"
HAVING count("Description") > 1)
WHERE .....
C'est loin comme je l'ai obtenu. Que devrais-je lire pour aller un peu plus loin? J'ai lu quelques livres et beaucoup de pages sur le sujet. Cependant dans ce cas je pense que mon problème n'est pas limité manque de SQL (ok, ce n'est pas mon problème seulement) mais plus approcher le problème dans le mauvais sens.
EDIT 1:
'Name'; 'Supplier Code'; 'Desciption';
"7CPS PODIUM S/SLV CRICKET POLO";"7CPS";"04 -14, S - 3XL"
"7CP PODIUM CRICKET PANT ";"7CP";"08 -14, S - 2XL"
"7CPT PODIUM 3/4 SLV CRICKET POLO";"7CPT";"04 -14, S - 3XL"
"7CPL PODIUM L/SLV CRICKET POLO";"7CPL";"04 -14, S - 3XL"
"T444MS Cool dry breathable sporty T-shirts";"T444MS";"XS - 2XL, XS - 2XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL, 8-16"
^^ est ce que je veux créer de vv
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"S - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"8-16"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T232RG Raglan Sleeve Tee";"T232RG";"XS - 3XL"
"T444MS Cool dry breathable sporty T-shirts";"T444MS";"XS - 2XL"
"T444MS Cool dry breathable sporty T-shirts";"T444MS";"XS - 2XL"
"T444MS Cool dry breathable sporty T-shirts";"T444MS";"XS - 2XL"
"T444MS Cool dry breathable sporty T-shirts";"T444MS";"XS - 2XL"
"7CP PODIUM CRICKET PANT ";"7CP";"08 -14"
"7CP PODIUM CRICKET PANT ";"7CP";"S - 2XL"
"7CPL PODIUM L/SLV CRICKET POLO";"7CPL";"04 -14"
"7CPL PODIUM L/SLV CRICKET POLO";"7CPL";"S - 3XL"
"7CPS PODIUM S/SLV CRICKET POLO";"7CPS";"04 -14"
"7CPS PODIUM S/SLV CRICKET POLO";"7CPS";"S - 3XL"
"7CPT PODIUM 3/4 SLV CRICKET POLO";"7CPT";"04 -14"
"7CPT PODIUM 3/4 SLV CRICKET POLO";"7CPT";"S - 3XL"
^^ en notant que les lignes de ne pas avoir plus d'une ligne de description doivent rester intacte.
Je l'ai créé à ce jour les nouveaux enregistrements dans une nouvelle table avec:
INSERT INTO tmptable
SELECT "Name" , "Supplier Code", array_to_string(array_accum("Description"), ', ')
FROM supplierstuffs
GROUP BY "Name", "Supplier Code", "Description"
HAVING count("Description") > 1
Alors maintenant, tout ce qui reste est de supprimer les enregistrements qui ont été attrapés par la commande cat. Il semble que je ne peux pas DELETE FROM
avec une clause ayant? Je pense que DELETE FROM table WHERE oid IN (SELECT OID's using having clause)
va fonctionner?
EDIT 2:
SELECT array_accum(oid)
FROM supplierstuffs
GROUP BY "Name", "Supplier Code", "Colour", "Cost ex Tax"
HAVING count("Description") > 1
retourne quelques tableaux de 2 OID, qui doivent tous être delorted. Je sens que je suis très proche, et pourtant si loin. Merci à l'avance
@Richo - vous avez demandé comment vous auriez pu mieux l'expliquer. Vous pourriez avoir donné des exemples de données que vous avez et les données que vous voulez. J'ai réécrit ma réponse avec ma meilleure estimation à ce sujet. Ce serait une bonne idée si vous éditiez votre requête pour inclure ce genre d'information; les exemples rendent toujours les choses plus claires. – APC
@APC - Merci, je vais prendre cela à bord. Je vais mettre à jour la question dans les prochaines minutes avec quelques exemples de données et où j'en suis. Merci encore. – richo