The supplier sent the same SKU twice

One product code appears on more than one row of the same file, sometimes with two different prices. Nothing in the file says which of them is current.

Why this happens

  • The commonest cause is a sender who appended rather than replaced. Their export ran again and added the quarter's rows underneath last quarter's, so the file is a history and you are reading it as a catalogue.
  • The second commonest is a genuine multiple: the same product at two pack sizes, or in two currencies, where the code identifies the product and something else identifies the line. There the duplicate is real and your schema is wrong, not their file.
  • Either way the cost lands later. Loaded as-is, one product has two prices, and which one wins is decided by whichever row your importer happened to process last.

What to do right now

  • Before anything else, count distinct codes against total rows. If the difference is large the file is a history; if it is one or two, it is more likely a data-entry slip worth asking about.
  • Look at what differs between the duplicate rows. If only the price differs, you probably want the later one. If pack size, unit, or currency differs, you need a second field in your key.
  • Ask the sender which is current rather than inferring it. A file with no timestamp column cannot answer this, and a wrong answer here is a wrong price on a live catalogue.

Stopping it on the next file

Mark the field unique and a second occurrence in the same delivery is refused at the door, named on its own row, before anything merges. Across deliveries the same field is what makes the file a merge instead of a pile: rows join on it, so a re-sent list reads as a handful of updates rather than a second copy of the catalogue.

The vendor price list template is a sheet with those rules already set, if you want to see the shape of one before building your own.

Other things that go wrong

Define the sheet once

Name your fields, and every file after that is matched to them and checked cell by cell before a row is allowed to land.